【发布时间】:2019-08-18 06:01:03
【问题描述】:
我正在尝试准备一个 whatsapp 文件进行分析。我需要将它分为三列:时间、名称和消息。该文本包含对话中带有换行符的一些消息。当我将它加载到数据框中时,这些消息显示为它们自己的行而不是一条消息的一部分。
4/16/19, 15:22 - +254 123 123: Hi my T. L
4/16/19, 15:22 - +254 123 124: Was up
4/17/19, 06:28 - member: Hi team details are Thursday 18 April,
Venue: Hilton Hotel
Time: 07:30am
Come on time team!
4/17/19, 12:17 - member: Hi guys
4/17/19, 12:18 - member: How many are coming tomorrow?
我尝试过使用两种方法:
直接使用正则表达式直接解析,如stackoverflow 和this 博客上的here 和here 和this 博客上的这些解决方案所示
间接通过创建一个文件,将这些多行消息编译成一行,如发现 here
这两种方法都失败了:( 我最喜欢的是第二种方法,只是因为您能够创建一个也可以被其他平台使用的文件,例如excel,画面...
对于方法 2:
import re
from datetime import datetime
start = True
with open('test.txt', "r", encoding='utf-8') as infile, open("output.txt", "w", encoding='utf-8') as outfile:
for line in infile:
time = re.search(r'\d\d\/\d\d\/\d\d,.(24:00|2[0-3]:[0-5][0-9]|[0-1][0-9]:[0-5][0-9])', line)
sender = re.search(r'-(.*?):', line)
if sender and time:
date = datetime.strptime(
time.group(),
'%m/%d/%Y, %H:%M')
sender = sender.group()
text = line.rsplit(r'].+: ', 1)[-1]
new_line = str(date) + ',' + sender + ',' + text
if not start: new_line = new_line
outfile.write(new_line)
else:
outfile.write(' ' + line)
start = False
我希望我终于不再得到:
4/17/19, 06:28 - member: Hi team details are Thursday 18 April,
Venue: Hilton Hotel
Time: 07:30am
Come on time team!
然后得到:
4/17/19, 06:28 - member: Hi team details are Thursday 18 April, Venue: Hilton Hotel Time: 07:30am Come on time team!
此外,将其作为数据框输出,并正确完成日期时间、成员和消息。
【问题讨论】:
标签: python regex parsing whatsapp