在新数据框中导入whatsapp文本文件

时间:2020-07-01 20:20:54

标签: python regex pandas

我正在尝试导入和分析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 callMissed 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)

但是,当我尝试构建数据框时,由于错误的模式,数据框为空。

请问我如何使用这些列构建非空数据框的任何建议?

非常感谢

2 个答案:

答案 0 :(得分:0)

因此,您的模式似乎有一个特定的问题,我看不到日期格式占其中的任何位置。

为简单起见,由于每条消息都是一行,所以从按行拆分开始。 然后在此处应用正则表达式,或者甚至更简单些,您可以在partition上使用],这样一方面可以给您日期,另一方面可以给用户+信息。然后在:上将用户+消息侧进行分区,现在您可以将其拆分为用户和消息。 要解析日期,您可以在标准库中使用dateutilstrptime

答案 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')]

您可以根据需要进行清洁。但是它将日期时间,用户名和其余消息捕获为单独的组。