Python不会像字典格式那样从文本文件中读取提取的行

时间:2019-04-16 13:24:15

标签: python list dictionary file-handling

我有一个文本输入文件,具有以下不同的输入,分别以字典和列表格式存储。文本文件的一部分在下面:

#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以它们实际存在的格式解释它们?

谢谢

3 个答案:

答案 0 :(得分:2)

只需添加以上答案即可:

使用:

 ast.literal_eval()

但是从字典的键中删除/替换“ \”,因为它会在literal_eval()函数中产生unicode错误

代码中的另一个错误,转换为字典后,由于字典未索引,因此无法执行d [0]

答案 1 :(得分:1)

函数readlines的作用是:读取行。您和我可以识别出这两行是Python字典和Python列表,但是Python不能,也不应。

在我看来,您正在从包含Python源的文件中读取配置设置。一种更标准的方法是使用.ini文件。查看模块configparser

答案 2 :(得分:1)

从文件获取的行是string。如果要将它们转换为dictlist对象,可以使用literal_eval

from ast import literal_eval

...
d = literal_eval(lines[i+1])
...
l = literal_eval(lines[i+1])

如果您可以更改输入文件的格式,我会考虑将其修改为json文件,以便使用json module方便地存储和加载对象。

相关问题