【问题标题】:Reading values as a list from ini file are picked at random从 ini 文件中读取值作为列表是随机选择的
【发布时间】:2016-04-26 19:14:00
【问题描述】:

我在从 ini 文件中读取一些值作为列表时遇到问题。我制作了一个程序,它将两个列表作为参数(源、目标),然后将源路径复制到目标路径。它从名为paths.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

【问题讨论】:

  • python(实际上是大多数语言)中的字典是无序的。你为什么要通过dict 传递你的config.items('...') 调用,然后将其转换回列表?
  • @Hamms 我的程序将两个列表(源、目标)作为参数。您是否知道一种更好的方法,我可以从 ini 文件中获取值,以便对项目进行排序?
  • @tomSurge 更好的方法是在同一行中输入所有源/目的地,用已知字符(例如',')分隔,然后简单地读取并拆分该行。它将导致代码更简单,并且无需更改代码即可拥有可变数量的源和目标。
  • @tomSurge 是的,您的程序需要两个列表。那你为什么要使用dict
  • @Hamms 因为我只需要值,所以如果我简单地执行 "list(config.items('src')) 我也会得到部分名称。

标签: python list dictionary ini


【解决方案1】:

我猜你正在使用内置的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 中获得您想要的东西。

【讨论】:

  • 以简洁、易懂和优雅的方式解决问题。谢谢。
猜你喜欢
  • 2014-02-20
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多