我有一个文本文件,其中包含以下形状的数据:
{"id": 1, {"device_data": 123}, "created_at": "2020-04-03"}{"id": 2, {"device_data": 123}, "created_at": '2020-04-03'}{"id": 2, {"device_data": 123}, "created_at": "2020-04-03"}{"id": 2, {"device_data": 123}, "created_at": '2020-04-03'}
没有我可以在这里使用的任何\n
分隔符或,
分隔符。我想将其解析为字典列表,以便将数据加载到数据帧中。
我试过使用.split()
和列表理解来解析这个,做这样的事情:
lst = [x + '}' for x in data.split('}') if x != '']
但是对于具有嵌套对象的记录,这显然会中断。
我也试过用正则表达式来做这件事,但我正在努力找出合适的方法。这是我到目前为止:
re.split('(\{(.*)\})', data)
根据以下建议,我还尝试使用该json
库。
with open('path/to/file', 'r') as f:
res = json.load(f)
但是,这导致了以下消息的错误:JSONDecodeError: Extra data
。我相信这是因为这个文件中有多个有效的 jsons。
我想在json.load()
for 循环中使用该命令,但后来在弄清楚如何正确拆分文件内容时遇到了麻烦。
有没有人对如何解决此类问题有任何建议?
您的记录分隔符是:
}{
如此给予
txt="{'id': 1, {'device_data': 123}, 'created_at': '2020-04-03'}{'id': 2, {'device_data': 123}, 'created_at': '2020-04-03'}{'id': 2, {'device_data': 123}, 'created_at': '2020-04-03'}{'id': 2, {'device_data': 123}, 'created_at': '2020-04-03'}"
拆分为记录:
records=txt.split('}{')
结果如下:
records[0]="{'id': 1, {'device_data': 123}, 'created_at': '2020-04-03'"
records[1]="'id': 2, {'device_data': 123}, 'created_at': '2020-04-03'"
并将记录解析为字典
mydictlist = []
for record in records:
# clean up excess brackets and tokens
record = record.replace('{','').replace('}','').replace("'",'')
mydict = dict((k.strip(), v.strip()) for k,v in
(item.split(':') for item in record.split(',')))
mydictlist.append(mydict)
示例结果如下所示:
mydictlist[2] = {'id': '2', 'device_data': '123', 'created_at': '2020-04-03'}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句