2016-04-26 49 views
0

我有一個問題,從一個ini文件讀取一些值作爲列表。我製作了一個程序,它將兩個列表作爲參數(源,目標),然後將源路徑複製到目標路徑。它從一個名爲paths.ini的ini文件獲取這些路徑。但是,我注意到這些值沒有按照時間順序添加,這意味着ini文件中的第一個值不一定是列表中的第一個值。這是一個嚴重錯誤,因爲我希望第一個源只能複製到第一個目標。從ini文件中讀取值列表隨機挑選

這裏是什麼,我都做了示例代碼:

try: 
    src = list(dict(config.items('src')).values()) 
    dst = list(dict(config.items('dst')).values()) 
    print("src: "+ str(src) + " dst: "+ str(dst)) 


except Exception as e: 
    messagebox.showerror("Data mismatch", "Mismatch between data from ini and core file") 
    sys.exit(0) 

if(utilFunctions.copyto(src, dst, True)): 
    successCopy() 
else: 
    errorCopy() 

對於那些希望看到的ini文件:

[src] 
src1 = C:/Users/saUser/Documents/copyExample/singleCopies/1/2/3.txt 
src2 = C:/Users/saUser/Documents/copyExample/singleCopies/1/2/3.txt 


[dst] 
dst1 = C:/Users/saUser/Documents/copyExample/singleCopies/1 
dst2 = C:/Users/saUser/Documents/copyExample/singleCopies/1 
+0

Python中的字典(實際上在大多數語言中)是無序的。你爲什麼要通過'dict'傳遞'config.items('...')'調用,然後將它重新放回列表中? – Hamms

+0

@Hamms我的程序將兩個列表(源,目標)作爲參數。你知道一種更好的方式,我可以通過某種方式從ini文件中獲取值,以便對項目進行排序嗎? – tomSurge

+0

@tomSurge更好的方法是在同一行中輸入所有源/目標,並用已知字符(例如',')分隔,然後簡單地讀取並分割該行。這將導致更簡單的代碼,並且能夠具有可變數量的源和目的地而無需更改代碼。 – DeepSpace

回答

2

我猜你是使用內置ConfigParser。根據文檔,這是使用collections.OrderedDict來存儲在您的文件中的值,所以當順序進行讀取時,應該沒問題,並且最終會有一個有序的字典,表示從[section]頂部到底部的文件內容。

如果你想要一個清單,只是不要那樣做list(dict(...你正在做的事情。更好地使用列表理解:

src = [value for key, value in config.items('src')] 
dst = [value for key, value in config.items('dst')] 

然後,你將有你想要的,有序的,以及,你srcdst

+1

清晰,可理解和優雅的解決問題的方式。 謝謝。 – tomSurge