1. txt存储json字符串
今天公司同事要建模型,合作伙伴给了一个范本txt文件,里面存储的是json数据,通过查看txt文件,可以发现,里面存储了很多个json字符串,每一个json字符串之间是以/* 数字 */
作为分隔符,这个分隔符应该是某个可视化工具导出时候自动带的,有多少分隔符应该就有多少条数据,并且字符串当中还有的不是规范的json数据.
数据2
2.分析处理
分隔符有规律,/*
开头,且都是独立的一行,这样就有了处理的办法.
2.1 首先读取这个txt文件,读取时候逐行读取,获得一个列表的可迭代对象,对其遍历判断判断开头是不是/*
,如果是,将这一行数据整体替换为一个新的标志符('随便 能显著和数据区分即可),然后将原来文件非标识符的部分和新的标识符写入到新的txt文件b.txt
2.2 接着对b.txt采用read()方法获得一个字符串对象,对其以新的标识符进行split分割获取一个列表对象,分割后获得的列表的第一个元素那么就是空(/* 1 */
这一条记录),从索引1取到最后就是完整的类似字典的一个列表,遍历转换为字典解析
3. 代码
import json
with open('a.txt','r',encoding='utf8') as fr:
datas=fr.readlines()
with open('b.txt','w',encoding='utf8') as fw:
for data in datas:
if data.startswith('/*'):
line='================='
fw.write(line)
fw.write('\n')
else:
if 'ObjectId(' or 'ISODate(' in data:
fw.write(data.replace('ObjectId(','').replace('ISODate(','').replace('),',','))
fw.write('\n')
with open('b.txt','r',encoding='utf8') as fr:
datas2=fr.read().split('=================')[1::]
for data in datas2:
item =json.loads(data)
filePath = item['filePath']
orderBy = item['orderBy']
updateUser = item['updateUser']
updateTime = item['updateTime']
userId = item['userId']
uuid = item['uuid']
honorUrl = item['honorUrl']
createTime = item['createTime']
userCertNo = item['userCertNo']
honorData = item['honorData']
channelName = item['channelName']
createUser = item['createUser']
disabled = item['disabled']
id = item['id']
isExpire = item['isExpire']
print('解析第%s条数据' % datas2.index(data))
print (filePath,orderBy,updateUser,updateTime,userId,uuid,honorUrl,createTime,userCertNo,honorData,channelName,createUser,disabled,id,isExpire)
4. 结果
新txt文件数据解析后
网友评论
with open('b.txt','w',encoding='utf8') as fw:
for data in datas:
if data.startswith('/*'):
line='================='
fw.write(line)
fw.write('\n')
else:
if 'ObjectId(' or 'ISODate(' in data:
fw.write(data.replace('ObjectId(','').replace('ISODate(','').replace('),',','))
fw.write('\n')
如果不满足以/* 开头 或者包含'ObjectId(' or 'ISODate( 的行,是不是别的行就没有写进b呢?
if ('ObjectId(' or 'ISODate(' )in data:
所以这个判断条件恒为正,所以没有必要加这个判断条件;或者再加另外一个else 用以处理不含这2个字符的行。