利用正则表达式解析qq聊天记录并转化为json文件

 主程序部分:

import re
import json
def preprocess(path,newfile):
    '''接受一个txt聊天记录文件地址,处理后生成json文件'''
    dialog=[]
    pattern=r'([-\d]+)\s([:\d]+)\s(【.*】)?(.+)?(\(\d+\)|<.*>)\n?(.*)' #感觉可以了 后面格式化的时候清除一下就好
    regex=re.compile(pattern=pattern)
    with open(path,encoding='utf-8',errors='ignore') as f:
        file=f.read()
        data=re.split(pattern=r'\n{2,3}',string=file)[2:-1]
        #data=str.split(file,'\n\n')[2:-1]#去除前两段无用内容和最后一个空字符
    error=0
    for i in data:
        try:
            date,time,nickname,name,ID,content=regex.findall(i)[0]
        except Exception as e:
            print(i,f'发生错误{e}')
            error+=1
        if not content:
            continue #如果内容为空就跳过这轮循环,不存储空数据
        dialog.append({
            "date":date,
            "time":time,
            # "nickname":nickname.strip('[【】]'), 没有开启绰号,因为太多了耗费token而且没啥意义
            "name":name,
            "ID":ID.strip('[()]'),
            "content":content,
        })
    js=json.dumps(dialog,ensure_ascii=0,indent=4)
    open(newfile,'w').write(js)
    print(f'格式化完成,发生了{error}次错误')
preprocess('幻想韵律-厦大幻想乡.txt','格式化聊天记录.json')

主要部分:

正则表达式:适配了可能出现的绰号,可能没有的名字以及可能是qq号或者邮箱

 pattern=r'([-\d]+)\s([:\d]+)\s(【.*】)?(.+)?(\(\d+\)|<.*>)\n?(.*)'

 对原聊天记录文件进行分离,因为qq聊天记录是用两个换行符来分割不同聊天记录的,这里还去除了前两行的无用信息和最后一个空字符串

 data=re.split(pattern=r'\n{2,3}',string=file)[2:-1]

目前问题:

1. 如何处理内容本身有连续两个换行符或多个

后续改进方向:

1. 分离消息头和消息内容

2. 遍历每一行,一旦发现符合消息头格式,就认为是开头,开始读取信息

3. 不断将一行归为信息集,直到发现下一个消息头

4. 将上面的消息头和信息集正则处理后写入json

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值