我正在尝试导入和分析whatsapp聊天(仅一个文件/会话)。我正在按照本文进行操作:
我的数据如下:
[28/07/2018, 01:39:21] User1: \u200eMessages to this chat and calls are now secured with end-to-end encryption.\n\u200e[28/07/2018, 01:39:21] Martin: \u200e<attached: 00000002-PHOTO-2018-07-28-01-39-20.jpg>\n\u200e[28/07/2018, 01:40:38] Martin: \u200e<attached: 00000003-PHOTO-2018-07-28-01-40-37.jpg>\n\u200e[28/07/2018, 02:06:08] Martin: \u200e<attached: 00000004-PHOTO-2018-07-28-02-06-06.jpg>\n\u200e[28/07/2018, 02:06:08] Martin: \u200e<attached: 00000005-PHOTO-2018-07-28-02-06-07.jpg>\n[28/07/2018, 16:53:01] User1: Noi stiamo andando a Londra, ti serve qualcosa.? Divertiti, saluti \n[29/07/2018, 16:13:35] User1: \u200eMissed video call\n[02/08/2018, 17:12:07] User1: \u200eMissed voice call\n[02/08/2018, 17:35:02]
,依此类推。 我看到的是:
\n
开头[ ]
[]
之后,是用户名,后跟:
; Missed video call
,Missed voice call
或仅是文本)。我想做的是建立一个具有以下内容的数据框:
导入文件后
file = open(r'path/file.txt',mode='r',encoding="utf8")
data = file.read()
file.close()
我试图用
pattern = re.compile('\d+:\d+\s+-\s+([a-zA-Z0-9]+\s?[a-zA-Z0-9]+\s?[a-zA-Z0-9]+\s?):\s+')
messengers = re.findall(pattern,data)
但是,当我尝试构建数据框时,由于错误的模式,数据框为空。
请问我如何使用这些列构建非空数据框的任何建议?
非常感谢
答案 0 :(得分:0)
因此,您的模式似乎有一个特定的问题,我看不到日期格式占其中的任何位置。
为简单起见,由于每条消息都是一行,所以从按行拆分开始。
然后在此处应用正则表达式,或者甚至更简单些,您可以在partition
上使用]
,这样一方面可以给您日期,另一方面可以给用户+信息。然后在:
上将用户+消息侧进行分区,现在您可以将其拆分为用户和消息。
要解析日期,您可以在标准库中使用dateutil或strptime
。
答案 1 :(得分:0)
这样的事情怎么样?
pattern = re.compile('(\[.*\])\s*(\w+)\:\s*(.*)')
re.findall(pattern,data)
这给出了这样的内容:
[('[28/07/2018, 01:39:21]', 'User1', '\u200eMessages to this chat and calls are now secured with end-to-end encryption.'), ('[28/07/2018, 01:39:21]', 'Martin', '\u200e<attached: 00000002-PHOTO-2018-07-28-01-39-20.jpg>'), ('[28/07/2018, 01:40:38]', 'Martin', '\u200e<attached: 00000003-PHOTO-2018-07-28-01-40-37.jpg>'), ('[28/07/2018, 02:06:08]', 'Martin', '\u200e<attached: 00000004-PHOTO-2018-07-28-02-06-06.jpg>'), ('[28/07/2018, 02:06:08]', 'Martin', '\u200e<attached: 00000005-PHOTO-2018-07-28-02-06-07.jpg>'), ('[28/07/2018, 16:53:01]', 'User1', 'Noi stiamo andando a Londra, ti serve qualcosa.? Divertiti, saluti '), ('[29/07/2018, 16:13:35]', 'User1', '\u200eMissed video call'), ('[02/08/2018, 17:12:07]', 'User1', '\u200eMissed voice call')]
您可以根据需要进行清洁。但是它将日期时间,用户名和其余消息捕获为单独的组。