Python 从ini文件中以列表形式读取值是随机选取的
从ini文件中读取一些值作为列表时出现问题。我制作了一个程序,它将两个列表作为参数(源、目标),然后将源路径复制到目标路径。它从名为paths.ini的ini文件中获取这些路径。但是,我注意到这些值没有按时间顺序添加,这意味着ini文件中的第一个值不一定是列表中的第一个值。这是一个严重错误,因为我只希望将第一个源复制到第一个目标 以下是我所做工作的示例代码:Python 从ini文件中以列表形式读取值是随机选取的,python,list,dictionary,ini,Python,List,Dictionary,Ini,从ini文件中读取一些值作为列表时出现问题。我制作了一个程序,它将两个列表作为参数(源、目标),然后将源路径复制到目标路径。它从名为paths.ini的ini文件中获取这些路径。但是,我注意到这些值没有按时间顺序添加,这意味着ini文件中的第一个值不一定是列表中的第一个值。这是一个严重错误,因为我只希望将第一个源复制到第一个目标 以下是我所做工作的示例代码: try: src = list(dict(config.items('src')).values()) dst = lis
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
我猜您正在使用内置的
ConfigParser
。根据文档,这是使用collections.OrderedDict
来存储文件中的值,因此,当按顺序读取时,应该可以使用有序字典,从[部分]
上到下表示文件内容
如果你想从中得到一个列表,就不要做你正在做的事情。最好使用列表理解:
src = [value for key, value in config.items('src')]
dst = [value for key, value in config.items('dst')]
然后在
src
和dst
中,您将得到您想要的,并进行排序。我猜您使用的是内置的ConfigParser
。根据文档,即使用集合。OrderedDict
将值存储在文件中,因此,在按顺序进行读取时,应该是正常的最后,您将得到一个有序的字典,从[节]
顶部到底部表示您的文件内容
如果你想从中得到一个列表,就不要做你正在做的事情。最好使用列表理解:
src = [value for key, value in config.items('src')]
dst = [value for key, value in config.items('dst')]
然后,您将在
src
和dst
中获得所需的排序。python词典(实际上在大多数语言中)是无序的。为什么您要通过dict
传递config.items(“…”)
调用,然后将其转换回列表?@Hamms我的程序需要两个列表(源、目的地)作为参数。您知道更好的方法吗?我可以从ini文件中获取值,以便对项目进行排序?@tomsweep更好的方法是在同一行中输入所有源/目的地,并用已知字符('例如,'分隔),然后简单地读取和拆分该行。这将导致代码更简单,并且能够在不需要更改代码的情况下拥有可变数量的源和目标。@是的,您的程序有两个列表。那么为什么要使用dict
?@Hamms,因为我只需要值,如果我只需要“列表”(config.items('src'))我也得到了节名。python中的字典(事实上在大多数语言中)是无序的。为什么你要通过dict
传递config.items(“…”)
调用,然后将其返回列表?@Hamms我的程序需要两个列表(源、目标)作为参数。您知道更好的方法可以从ini文件中获取值,从而对项目进行排序吗?@tomsweep更好的方法是在同一行中输入所有源/目的地,并用已知字符(“,”例如)分隔,然后简单地读取和拆分该行。这将导致代码更简单,并且能够在不需要更改代码的情况下拥有可变数量的源和目标。@是的,您的程序有两个列表。那么为什么要使用dict
?@Hamms,因为我只需要值,如果我只需要“列表”(config.items('src'))我还得到了部分名称。干净、易懂、优雅的解决问题的方法。谢谢。干净、易懂、优雅的解决问题的方法。谢谢。