You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python处理WhatsApp导出TXT聊天记录时Time为空、Name输出错误问题

问题原因
  • Time为空的核心原因:截取date后,剩余字符串开头保留了date后的空格,直接对line2执行split(" ")得到的第一个元素是空字符串,切片[:2]后仍然为空。
  • Name字段不符合预期的原因:一是截取time后的line3开头同样残留空格,未做去除就直接拆分;二是强制取拆分结果前4个字符的逻辑不符合实际用户名长度规则,只会截断出错误内容。
  • 隐藏错误:cleaned_data.append语句缩进错误,处于for循环外部,只会将循环结束后最后一行的解析结果加入列表,最终DataFrame默认只有1行数据。
  • 路径潜在风险:Windows文件路径直接用反斜杠可能触发转义字符解析,导致文件读取失败。
解决方案

WhatsApp导出的TXT文件每行标准格式为日期 时间 - 用户名: 消息内容,直接硬编码切片长度的解析逻辑兼容性极差,推荐按格式拆分的逻辑实现,修正后代码如下:

import pandas as pd

# 用原始字符串定义路径避免转义问题
file_path = r'D:\Analysis\example_chat_whatsapp.txt'
with open(file_path, encoding="utf-8") as f: 
    data = f.readlines()

print('总行数: %s' %(len(data)))

cleaned_data = []
# 跳过首行系统通知消息
dataset = data[1:]
# 用于拼接换行的多行长消息
prev_msg = None

for line in dataset:
    line = line.strip()
    # 跳过空行
    if not line:
        continue
    # 判断是否为带时间戳的新消息行
    if ' - ' in line and line.split(' - ')[0].count('/') == 2 and ':' in line.split(' - ')[0]:
        # 先存储上一条解析完成的消息
        if prev_msg:
            cleaned_data.append(prev_msg)
        # 拆分时间戳部分和内容部分
        time_part, content_part = line.split(' - ', 1)
        date, time = time_part.split(' ', 1)
        # 拆分用户名和消息内容
        if ':' in content_part:
            name, message = content_part.split(':', 1)
            name = name.strip()
            message = message.strip()
            prev_msg = [date, time, name, message]
    else:
        # 属于上一条消息的换行内容,拼接至消息字段
        if prev_msg:
            prev_msg[3] += f'\n{line}'

# 存入最后一条消息
if prev_msg:
    cleaned_data.append(prev_msg)

# 生成结果DataFrame
df = pd.DataFrame(cleaned_data, columns = ['Date', 'Time', 'Name', 'Message']) 
# 如需导出为文件可执行下行代码
# df.to_csv('whatsapp_chat_result.csv', index=False, encoding='utf-8-sig')

内容的提问来源于stack exchange,提问作者jfcb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:27:02