首页 新闻 会员 周边

【python】如何从文本中读取字典形式的数据?

-1
[已解决问题] 解决于 2018-02-20 09:27

文本中的数据:
{'command': 'cmd1', 'option': [{'req': [{'ipt': [{'str1': 'name1'}]}]}], 'OS': 'OS1', 'device': 'D1'}
{'command': 'cmd2', 'option': [{'req': [{'ipt': [{'str1': 'name2'}]}]}], 'OS': 'OS2', 'device': 'D2'}
{'command': 'cmd3', 'option': [{'req': [{'ipt': [{'str1': 'name3_1'}]}]}, {'opt': [{'req': [{'str2': 'name3_2'}]}, {'req': [{'str3': 'name3_3'}]}]}], 'OS': 'OS3', 'device': 'D3'}

想把上面的数据变成这个样子:
(option元素里包含多个元素的时候,分成多行)
cmd1 name1 OS1 D1
cmd2 name2 OS2 D2
cmd3 name3_1 OS2 D3
cmd3 name3_2 OS2 D3
cmd3 name3_3 OS2 D3

我本来想利用文本里的数据已经写成字典的形式,直接把文本变成字典,可是读取文本的时候就自动把一行读成字符串形式了。
请各位大神不吝赐教~!

芽衣的主页 芽衣 | 菜鸟二级 | 园豆:384
提问于:2018-02-16 15:27
< >
分享
最佳答案
1

其实这个格式已经很像json了,只要把文本中的单引号换成双引号之后再用json.loads就好了。

import json

content = None
with open('data.txt', 'r', encoding='utf-8') as file:
     content = file.read()

content = content.replace("'", '"')
data = json.loads(content)
奖励园豆:5
小柊 | 菜鸟二级 |园豆:214 | 2018-02-19 17:02

谢谢你的热心回答!

芽衣 | 园豆:384 (菜鸟二级) | 2018-02-20 09:28

python中单引号和双引号应该算是等效的。直接load成json就行了。

墨镜带佬星 | 园豆:2294 (老鸟四级) | 2018-02-20 23:11

@codegay: python里单引号和双引号是等效的,但json里并不双引号和单引号并不等价。json要求键值对用双引号括起来。如果不做替换,直接json.loads是会报错的。

小柊 | 园豆:214 (菜鸟二级) | 2018-02-20 23:37

@小柊: 我这里试的。是直接load的。

墨镜带佬星 | 园豆:2294 (老鸟四级) | 2018-02-21 03:28

@codegay: python3.6.3亲测报错

小柊 | 园豆:214 (菜鸟二级) | 2018-02-21 13:03
其他回答(1)
1

如果你的文本中的数据来源可行,不考虑安全问题的话,可以:

>>> s = "{'command': 'cmd1', 'option': [{'req': [{'ipt': [{'str1': 'name1'}]}]}], 'OS': 'OS1', 'device': 'D1'}"

>>> x = eval(s)

>>> print x['command']
cmd1

鸪斑兔 | 园豆:202 (菜鸟二级) | 2018-02-24 12:13

谢谢你的热心回答!

支持(0) 反对(0) 芽衣 | 园豆:384 (菜鸟二级) | 2018-03-30 10:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册