python - 将包含数组的文件的行转换为字典列表
问题描述
我有一个文件,其中每一行都包含我想读入字典的数据,从而产生一个字典列表。或字典字典,以每行的第一个元素为键。每行的第一个元素是唯一一个我可以保证从一行到另一行的类型相同的元素,即它是一个名称。文件中的数据如下所示:
name:value1, var2:('str1', 'str2','str3'), var3:[0.1,1,10] , var4:range(1,10)
name:value2, var5:('str1', 'str2'), var6:range(1,10)
我想让它最终变成这样:
dictionaryList=[
{"name": "value1", "var2":('str1', 'str2','str3'), var3:[0.1,1,10] , var4:range(1,10)},
{name:value2, var5:('str1', 'str2'), var6:range(1,10)}
]
关于将行读入单个字典的元素或将文件读入嵌套字典有很多问题。不过,它们都依赖于用逗号分隔行。IE
content = f.readlines()
for line in content:
line = line.strip('\r').strip('\n').split(':')
如果我这样做,我最终会在范围和数组和 wotnot 中出现中断。我本来打算使用 : 作为分隔符,但这感觉像是非常糟糕的形式,当我收到更多数据时,我无法自动将正确的逗号转换为冒号。有没有办法解决这个问题?
解决方案
f = open("test.txt","r")
lines = f.readlines()
f.close()
dictList = []
stack = []
brack = "([{"
opbrack = ")]}"
for line in lines:
d = {}
key = ""
val = ""
k = 0
for i in line:
if i == ',':
if not(stack) or stack[-1] not in brack:
d[key] = val
key = ""
val = ""
k = 0
elif k==0:
key += i
else:
val += i
elif i in brack:
stack.append(i)
if k==0:
key += i
else:
val += i
elif i in opbrack:
stack.pop()
if k==0:
key += i
else:
val += i
elif i == ":":
if not(stack) or stack[-1] not in brack:
k = 1
elif k==0:
key += i
else:
val += i
else:
if k==0:
key += i
else:
val += i
dictList.append(d)
print dictList
这段代码应该做你需要的。它假定文件已经是正确的格式。
这是输出:
[{'name': 'value1', ' var2': "('str1', 'str2','str3')", ' var3': '[0.1,1,10] '}, {' var5': "('str1', 'str2')", 'name': 'value2'}]
推荐阅读
- ruby - “this”的 Ruby 模拟(从内部访问类实例)
- python - 使用 pandas 在连接键上组合子数据帧
- python - Python - 从 Twitter API 收集数据并将其存储在 SQLite 数据库中
- docker - 为什么 docker (dind) 容器中的 docker 使用主机路径挂载卷?
- database - Laravel 动态数据库表名
- php - nginx(debian)上带有 index.html 的 Wordpress
- python-3.x - 分析后的 mpi4py 性能差异
- java - recyclerview 没有在片段中显示 sqlite 数据
- apiconnect - 在 GateWayScript 中解析 XML 响应
- java - 编写 Util 类的最佳方法