Python三期爬虫作业

python清洗处理txt文件存储的不规范json数据

2017-11-03  本文已影响94人  chengcxy

1. txt存储json字符串

今天公司同事要建模型,合作伙伴给了一个范本txt文件,里面存储的是json数据,通过查看txt文件,可以发现,里面存储了很多个json字符串,每一个json字符串之间是以/* 数字 */作为分隔符,这个分隔符应该是某个可视化工具导出时候自动带的,有多少分隔符应该就有多少条数据,并且字符串当中还有的不是规范的json数据.

数据1
数据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文件
数据解析后
上一篇下一篇

猜你喜欢

热点阅读