如何从文件中创建嵌套字典列表

3

我有一个文本输入文件,里面包含一系列的键值对,我想将它们读入Python中作为字典列表,但似乎无法按预期工作。注意,该文件不是有效的JSON格式,因此我无法使用内置的json方法,这个问题也和这个不重复。我怀疑我在这里缺少了一些显而易见的东西,所以非常感谢任何指导。

# /tmp/tmp.txt
[{'k1': {'k2': {'k3': ['a', 'b', 'c']}}}, {'k4': {'k5': {'k6': ['v', 'x', 'y', 'z']}}}]

由于此文件包含2个元素的列表,我期望len为2,typelist,但事实并非如此。

with open('/tmp/tmp.txt', encoding='utf-8') as data_file:
    data = data_file.read()

print(len(data)) # <-- the goal is for this to show 2
print(type(data)) # <-- the goal is for this to return `list`

输出:

88
<class 'str'>

data_file.read() 只会返回一个字符串。它不会自动将你的文件转换成列表。 :) - Vincent Pakson
2个回答

2

你的data是一个字符串。你可以使用literal_eval将其转换为列表:

import ast
data_list = ast.literal_eval(data)
len(data_list)
#2

谢谢。我之前不知道ast库,会进一步了解它。 - user9074332

1

编辑:我之前没有看到DYZ比我先回答了,但我想更详细地解释一下我的答案。

有一个叫做“ast”的模块,它有一个名为“literal_eval”的函数,正如其名称所示,它将txt的信息作为Python代码进行评估,并验证输入。

import os, ast

with open('/tmp/tmp.txt', encoding='utf-8') as data_file:
    data = ast.literal_eval(data_file.read())

print(len(data))
print(type(data))

输出:

2
<class 'list'>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接