我有一个文本输入文件,具有以下不同的输入,分别以字典和列表格式存储。文本文件的一部分在下面:
#Drive-Size-Mapping
{'root' : 50 , '\usr' : 20, 'swap' : 1}
#OS-Version
[7.1, 7.2, 7.3, 7.4, 7.5, 7.6]
如您所见,第一行是字典格式,第二行是列表格式。 现在,当我在变量中读取和存储行时,Python无法识别格式。这是我正在尝试的代码:
f=open("C:\\Users\xyz\\Desktop\\Inputs.txt")
lines=f.readlines()
i = lines.index("#Drive-Size-Mapping\n")
di=dict()
di = lines[i+1]
print(di[0])
j = lines.index("#OS-Version\n")
list = lines[j+1]
print(list[0])
上面的代码是:
{ {
即它只打印存在于数组的第一个数组索引中的项目。
我想要python将这些变量分别解释为字典和列表。所以,如果我这样做print di["root"]
我的代码应将其识别为字典,并打印为50
。和
print(list[0])
应将其识别为列表并输出7.1.
请让我知道如何处理文件行,以便让python以它们实际存在的格式解释它们?
谢谢
答案 0 :(得分:2)
只需添加以上答案即可:
使用:
ast.literal_eval()
但是从字典的键中删除/替换“ \”,因为它会在literal_eval()函数中产生unicode错误
代码中的另一个错误,转换为字典后,由于字典未索引,因此无法执行d [0]
答案 1 :(得分:1)
函数readlines
的作用是:读取行。您和我可以识别出这两行是Python字典和Python列表,但是Python不能,也不应。
在我看来,您正在从包含Python源的文件中读取配置设置。一种更标准的方法是使用.ini
文件。查看模块configparser
。
答案 2 :(得分:1)
从文件获取的行是string
。如果要将它们转换为dict
或list
对象,可以使用literal_eval
:
from ast import literal_eval
...
d = literal_eval(lines[i+1])
...
l = literal_eval(lines[i+1])
如果您可以更改输入文件的格式,我会考虑将其修改为json
文件,以便使用json module方便地存储和加载对象。