从 python 中的文本文件读取字典结构
Reading dictionary structure from text file in python
我在文件中定义了 python 字典:
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First', 'Friends': {'Emil':1, 'Frank':0} };
我想阅读这本词典并在 python 代码中使用它的元素。我最终得到以下代码:
#!/usr/bin/python
import sys
import os
import ast
import re
from pprint import pprint as pp
def readObjFromFile(file):
with open (file, "r") as myfile:
data=myfile.read()
data = re.sub("^#.*", "", data)
data = data.replace('\n', '')
data = data.split("=", 1)[1].split(";", 1)[0].lstrip()
data = ast.literal_eval(data)
return data
if __name__ == "__main__":
if len(sys.argv[1:]) == 1:
dict = readObjFromFile(sys.argv[1])
print type(dict)
pp(dict)
else:
print "Pass file from which object will be read"
exit
这也适用于 this 更大的字典。我想请问有没有更好的方法呢?我知道 pickle
模块,但这不是我想要的,因为它以自己的格式存储数据。由于与 python 指令相似,我正在考虑用于解析 json 的模块,但我不知道这种方法是否安全。
您拥有的文件确实代表了字典的人工解释版本。我们可以阅读它并查看如何有一个我们想要分配给字典的变量。你真正想做的是以编程友好的格式存储字典。而JSON就是对这种格式的完美运用。其他格式包括 XML 和 YAML,但 Python 本身很容易读取 JSON 输入。
如果仔细查看您的示例,您会发现示例数据集包含一个包含嵌套字典的字典。 JSON 专为此类用例而构建。因此,包含上述数据的 JSON 文件将如下所示:
{
"Name": "Zara",
"Age": 7,
"Class": "First",
"Friends": {
"Emil":1,
"Frank":0
}
}
请注意,子词典是 JSON 文件结构的一部分。另请注意,使用了双引号。
现在您可以轻松地让 python 为您完成工作:
import json
from os import open
from pprint import pprint
data = open(filename).read()
d = json.loads(data)
pprint(d)
您可以使用以下方式访问子模块:
d['Friends]
我假设您无法控制文件格式并且是从某个地方传递过来的。它足够接近 json,我的目标是 json。我会做类似下面的事情:
lines = []
with open(file) as f:
for line in f:
if line[0] == "#":
continue
l = line.strip().split("=")[-1].strip(";")
lines.append(re.sub("'", "\"", l)
return json.loads("".join(lines))
我在文件中定义了 python 字典:
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First', 'Friends': {'Emil':1, 'Frank':0} };
我想阅读这本词典并在 python 代码中使用它的元素。我最终得到以下代码:
#!/usr/bin/python
import sys
import os
import ast
import re
from pprint import pprint as pp
def readObjFromFile(file):
with open (file, "r") as myfile:
data=myfile.read()
data = re.sub("^#.*", "", data)
data = data.replace('\n', '')
data = data.split("=", 1)[1].split(";", 1)[0].lstrip()
data = ast.literal_eval(data)
return data
if __name__ == "__main__":
if len(sys.argv[1:]) == 1:
dict = readObjFromFile(sys.argv[1])
print type(dict)
pp(dict)
else:
print "Pass file from which object will be read"
exit
这也适用于 this 更大的字典。我想请问有没有更好的方法呢?我知道 pickle
模块,但这不是我想要的,因为它以自己的格式存储数据。由于与 python 指令相似,我正在考虑用于解析 json 的模块,但我不知道这种方法是否安全。
您拥有的文件确实代表了字典的人工解释版本。我们可以阅读它并查看如何有一个我们想要分配给字典的变量。你真正想做的是以编程友好的格式存储字典。而JSON就是对这种格式的完美运用。其他格式包括 XML 和 YAML,但 Python 本身很容易读取 JSON 输入。
如果仔细查看您的示例,您会发现示例数据集包含一个包含嵌套字典的字典。 JSON 专为此类用例而构建。因此,包含上述数据的 JSON 文件将如下所示:
{
"Name": "Zara",
"Age": 7,
"Class": "First",
"Friends": {
"Emil":1,
"Frank":0
}
}
请注意,子词典是 JSON 文件结构的一部分。另请注意,使用了双引号。
现在您可以轻松地让 python 为您完成工作:
import json
from os import open
from pprint import pprint
data = open(filename).read()
d = json.loads(data)
pprint(d)
您可以使用以下方式访问子模块:
d['Friends]
我假设您无法控制文件格式并且是从某个地方传递过来的。它足够接近 json,我的目标是 json。我会做类似下面的事情:
lines = []
with open(file) as f:
for line in f:
if line[0] == "#":
continue
l = line.strip().split("=")[-1].strip(";")
lines.append(re.sub("'", "\"", l)
return json.loads("".join(lines))