为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨__羊羊 2022-01-11 19:35:37
我有一个具有不同输入的文本输入文件,如下所示,分别以字典和列表格式存储。部分文本文件如下:#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 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

只需添加上述答案:

利用:

 ast.literal_eval()

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

代码中的另一个错误,在转换为字典后,你不能做 d[0] 因为字典没有索引


查看完整回答
反对 回复 2022-01-11
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您从文件中获得的行是string. 如果要将它们转换为dict或list对象,可以使用literal_eval:


from ast import literal_eval


...

d = literal_eval(lines[i+1])

...

l = literal_eval(lines[i+1])

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


查看完整回答
反对 回复 2022-01-11
?
catspeake

TA贡献1111条经验 获得超0个赞

该函数readlines执行它所说的:它读取 lines。你我都可以认识到这两行是 Python 字典和 Python 列表,但 Python 不能也不应该。

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


查看完整回答
反对 回复 2022-01-11
  • 3 回答
  • 0 关注
  • 298 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号