Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从文件创建嵌套词典列表_Python_Python 3.x - Fatal编程技术网

Python 如何从文件创建嵌套词典列表

Python 如何从文件创建嵌套词典列表,python,python-3.x,Python,Python 3.x,我有一个输入文本文件,其中包含一个键/值对列表,我希望将其作为字典列表读入python,但似乎无法使其按预期工作。请注意,该文件不是有效的json格式,因此我无法使用内置的json,并且这个问题与之不同。我怀疑我在这里遗漏了一些明显的东西,因此非常感谢您的指导 # /tmp/tmp.txt [{'k1': {'k2': {'k3': ['a', 'b', 'c']}}}, {'k4': {'k5': {'k6': ['v', 'x', 'y', 'z']}}}] 由于该文件包含一个包含2个元素

我有一个输入文本文件,其中包含一个键/值对列表,我希望将其作为字典列表读入python,但似乎无法使其按预期工作。请注意,该文件不是有效的json格式,因此我无法使用内置的
json
,并且这个问题与之不同。我怀疑我在这里遗漏了一些明显的东西,因此非常感谢您的指导

# /tmp/tmp.txt
[{'k1': {'k2': {'k3': ['a', 'b', 'c']}}}, {'k4': {'k5': {'k6': ['v', 'x', 'y', 'z']}}}]
由于该文件包含一个包含2个元素的列表,我希望
len
为2,而
type
list
,但这不是我看到的

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`
以open('/tmp/tmp.txt',encoding='utf-8')作为数据文件的
:
data=data\u file.read()

打印(len(data))#您的
数据是一个字符串。您可以使用
literal\u eval
将其转换为列表:

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

编辑:我之前没有看到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'>
2

如果您试图存储和检索Python对象,序列化可能是一种更好的方法。例如,请参见


但是,在当前上下文中,您可以使用内置Python函数来实现您的目标。

data\u file.read()只返回字符串。我不会自动将您的文件转换为列表。:)你不应该使用eval。这是一个非常有力的声明@DYZ。你能详细说明一下吗?谢谢你。我以前不知道
ast
库,我将进一步查看它。
2
<class 'list'>