连接字符串和引用

时间:2017-01-21 15:18:29

标签: python

我实际上正在制作一个脚本来对一些数据库进行后处理。

当我输入一些细节(版本,选项等)时,我希望我的脚本获取文件的路径和名称,它看起来像这样......

def file_info(version, something, option):
    ####### This part is the DB
    ## Version-path
    PATH_ver1 = '/ver1'
    PATH_something1 = '/something1'

    ## Name of files, there are bunch of these datas
    DEF_ver2_something2 = '/name of file'
    DEF_ver2_something1_option4 = '/name of file'

    ####### Now starts to postprocess
    ## path setting - other variables also follows this
    if version == 'ver1':
        PATH_VER = PATH_ver1
    elif version == 'ver2':
        PATH_VER = PATH_ver2

    ## Concatenating the paths
    PATH_BIN = PATH_TOP + PATH_VER + PATH_TYP + PATH_OPT

    ## Setting the file name
    BIN_file = 'DEF_' + version + '_' + something + '_' + option

    return PATH_BIN, BIN_FILE

def main():
    version = input("version here")
    something = input("something here")
    option = input("option here")

    output = file_info(version, something, option)

当我输入内容时,我可以正确获取文件的路径,但文件名提供变量的名称,而不是' /文件的名称'。

另外,由于我的变量有两个值,我的意思是,它不是一个一个一个匹配,我想我不能使用字典格式。每个项目都有一个键(DEF _ ***),并且有两个对应的值(PATH_BIN和BIN_FILE)。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

听起来你需要的是嵌套词典:

#!python3.6

####### This part is the DB
PATH_TOP = '/TOP/PATH'

## Version-path
PATH = {'ver1':'/ver1',
        'ver2':'/ver2',
        'something1':'/something1',
        'something2':'/something2',
        ''    :'',
        'opt1':'/opt1',
        'opt2':'/opt2',
        'opt3':'/opt3',
        'opt4':'/Totally/Different/PATH'
       }

## Name of files
DEF = {'ver1':{'something1':{''    :'v1s1'
                            ,'opt1':'v1s1o1'
                            ,'opt2':'v1s1o2'
                            }
              ,'something2':{'opt2':'v1s2o2'
                            ,'opt3':'v1s2o3'
                            }
              }
      ,'ver2':{'something1':{'opt1':'v2s1o1'
                            ,'opt2':'v2s1o2'
                            ,'opt4':'v2s1o4'
                            }
              ,'something2':{''    :'v2s2'
                            }
              }
      }

def file_info(version, something, option):
    PATH_BIN = PATH_TOP + PATH[version] + PATH[something] + PATH[option]
    BIN_FILE = DEF[version][something][option]
    return PATH_BIN, BIN_FILE

def prompt(item,values):
    lst = "'" + "','".join(values) + "'"
    while True:
        selection = input(f'{item}({lst})? ')
        if selection in values:
            break
        print('not a choice')
    return selection

def main():
    version = prompt('Version',DEF)
    something = prompt('Something',DEF[version])
    option = prompt('Option',DEF[version][something])
    output = file_info(version, something, option)
    print(output)

if __name__ == '__main__':
    main()

输出:

C:\>test.py
Version('ver1','ver2')? ver1
Something('something1','something2')? some
not a choice
Something('something1','something2')? something2
Option('opt2','opt3')? opt2
('/TOP/PATH/ver1/something2/opt2', 'v1s2o2')

C:\>test.py
Version('ver1','ver2')? ver1
Something('something1','something2')? something1
Option('','opt1','opt2')?
('/TOP/PATH/ver1/something1', 'v1s1')