2016-04-26 74 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