文本中的数据:
{'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
我本来想利用文本里的数据已经写成字典的形式,直接把文本变成字典,可是读取文本的时候就自动把一行读成字符串形式了。
请各位大神不吝赐教~!
其实这个格式已经很像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)
谢谢你的热心回答!
python中单引号和双引号应该算是等效的。直接load成json就行了。
@codegay: python里单引号和双引号是等效的,但json里并不双引号和单引号并不等价。json要求键值对用双引号括起来。如果不做替换,直接json.loads是会报错的。
@小柊: 我这里试的。是直接load的。
@codegay: python3.6.3亲测报错
如果你的文本中的数据来源可行,不考虑安全问题的话,可以:
>>> s = "{'command': 'cmd1', 'option': [{'req': [{'ipt': [{'str1': 'name1'}]}]}], 'OS': 'OS1', 'device': 'D1'}"
>>> x = eval(s)
>>> print x['command']
cmd1
谢谢你的热心回答!