2017-01-21 46 views
-1

我實際上正在製作一個腳本來後處理某些數據庫。連接字符串和引用

我想,當我進入一些細節(版本,期權等),我的腳本來獲取路徑和文件名,它看起來像這樣...

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)。我該如何解決這個問題?

+0

請儘量減少你的代碼,以最短的代碼可能重現該問題,讓你得到一個[MCVE]。 –

+0

@ das-g感謝您的評論。我刪除了一些行以清楚說明。 – jin890

+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')