- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Windows 上运行 Python 2.7。
我有一个大文本文件 (2 GB),涉及 50 万多封电子邮件。该文件没有明确的文件类型,格式为:
email_message#: 1
email_message_sent: 10/10/1991 02:31:01
From: tomf@abc.com| Tom Foo |abc company|
To: adee@abc.com| Alex Dee |abc company|
To: benfor12@xyz.com| Ben For |xyz company|
email_message#: 2
email_message_sent: 10/12/1991 01:28:12
From: timt@abc.com| Tim Tee |abc company|
To: tomf@abc.com| Tom Foo |abc company|
To: adee@abc.com| Alex Dee |abc company|
To: benfor12@xyz.com| Ben For|xyz company|
email_message#: 3
email_message_sent: 10/13/1991 12:01:16
From: benfor12@xyz.com| Ben For |xyz company|
To: tomfoo@abc.com| Tom Foo |abc company|
To: t212@123.com| Tatiana Xocarsky |numbers firm |
...
如您所见,每封电子邮件都有以下相关数据:
1) 发送时间
2) 发送邮件的邮箱
3)发件人姓名
4) 该人工作的公司
5) 收到电子邮件的每个电子邮件地址
6) 每个收到邮件的人的名字
7) 每个收到邮件的人的公司
在文本文件中有 500K+ 封电子邮件,电子邮件最多可以有 16K 收件人。在电子邮件中如何引用人名或他们工作的公司名称方面没有任何模式。
我想获取这个大文件并在 python
中对其进行操作,使其最终成为 Pandas
Dataframe
。我想要 pandas
dataframe
格式如下 excel
的截图:
编辑
我解决这个问题的计划是编写一个“解析器”,它接受这个文本文件并读取每一行,将每行中的文本分配给 pandas
dataframe 的特定列
。
我打算写类似下面的东西。有人可以确认这是执行此操作的正确方法吗?我想确保我没有丢失内置的 pandas
函数或来自不同 module
的函数。
#connect to object
data = open('.../Emails', 'r')
#build empty dataframe
import pandas as pd
df = pd.DataFrame()
#function to read lines of the object and put pieces of text into the
# correct column of the dataframe
for line in data:
n = data.readline()
if n.startswith("email_message#:"):
#put a slice of the text into a dataframe
elif n.startswith("email_message_sent:"):
#put a slice of the text into a dataframe
elif n.startswith("From:"):
#put slices of the text into a dataframe
elif n.startswith("To:"):
#put slices of the text into a dataframe
最佳答案
我无法抗拒这种痒,所以这是我的方法。
from __future__ import unicode_literals
import io
import pandas as pd
from pandas.compat import string_types
def iter_fields(buf):
for l in buf:
yield l.rstrip('\n\r').split(':', 1)
def iter_messages(buf):
it = iter_fields(buf)
k, v = next(it)
while True:
n = int(v)
_, v = next(it)
date = pd.Timestamp(v)
_, v = next(it)
from_add, from_name, from_comp = v.split('|')[:-1]
k, v = next(it)
to = []
while k == 'To':
to_add, to_name, to_comp = v.split('|')[:-1]
yield (n, date, from_add[1:], from_name[1:-1], from_comp,
to_add[1:], to_name[1:-1], to_comp)
k, v = next(it)
if not hasattr(filepath_or_buffer, read):
filepath_or_buffer
def _read_email_headers(buf):
columns=['email_message#', 'email_message_sent',
'from_address', 'from_name', 'from_company',
'to_address', 'to_name', 'to_company']
return pd.DataFrame(iter_messages(buf), columns=columns)
def read_email_headers(path_or_buf):
close_buf = False
if isinstance(path_or_buf, string_types):
path_or_buf = io.open(path_or_buf)
close_buf = True
try:
return _read_email_headers(path_or_buf)
finally:
if close_buf:
path_or_buf.close
这是你将如何使用它:
df = read_email_headers('.../data_file')
只需使用您的文件路径调用它,您就拥有了数据框。
现在,以下内容仅供测试之用。在现实生活中,您不会这样做来处理您的实际数据。
由于我(或随机的 StackOverflow 读者)没有您的文件副本,我必须使用字符串来伪造它:
text = '''email_message#: 1
email_message_sent: 10/10/1991 02:31:01
From: tomf@abc.com| Tom Foo |abc company|
To: adee@abc.com| Alex Dee |abc company|
To: benfor12@xyz.com| Ben For |xyz company|
email_message#: 2
email_message_sent: 10/12/1991 01:28:12
From: timt@abc.com| Tim Tee |abc company|
To: tomf@abc.com| Tom Foo |abc company|
To: adee@abc.com| Alex Dee |abc company|
To: benfor12@xyz.com| Ben For|xyz company|'''
然后我可以创建一个类似文件的对象并将其传递给函数:
df = read_email_headers(io.StringIO(text))
print(df.to_string())
email_message# email_message_sent from_address from_name from_company to_address to_name to_company
0 1 1991-10-10 02:31:01 tomf@abc.com Tom Foo abc company adee@abc.com Alex Dee abc company
1 1 1991-10-10 02:31:01 tomf@abc.com Tom Foo abc company benfor12@xyz.com Ben For xyz company
2 2 1991-10-12 01:28:12 timt@abc.com Tim Tee abc company tomf@abc.com Tom Foo abc company
3 2 1991-10-12 01:28:12 timt@abc.com Tim Tee abc company adee@abc.com Alex Dee abc company
4 2 1991-10-12 01:28:12 timt@abc.com Tim Tee abc company benfor12@xyz.com Ben Fo xyz company
或者,如果我想使用实际文件:
with io.open('test_file.txt', 'w') as f:
f.write(text)
df = read_email_headers('test_file.txt')
print(df.to_string()) # Same output as before.
但是,再次声明,您不必执行此操作即可将函数用于您的数据。只需用文件路径调用它即可。
关于python - 将文本格式的数据读入 Python Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35158954/
表架构 DROP TABLE bla; CREATE TABLE bla (id INTEGER, city INTEGER, year_ INTEGER, month_ INTEGER, val I
我需要拆分字符串/或从具有以下结构的字符串中获取更容易的子字符串。 字符串将来自 window.location.pathname 或 window.location.href,看起来像 text/n
每当将对象添加到数组中时,我都会尝试更新 TextView ,并在 TextView 中显示该文本,如下所示: "object 1" "object 2" 问题是,每次将新对象添加到数组时,它都会覆盖
我目前正在寻找使用 Java 读取网站可见文本并将其存储为纯文本字符串的方法。 换句话说,我想转换成这样: Hello stupid World进入“ Hello World ” 或者类似的东西 Un
我正在尝试以文本和 HTML 格式发送电子邮件,但无法正确发送正确的 header 。特别是,我想设置 Content-Type header ,但我找不到如何为 html 和文本部分单独设置它。 这
我尝试了上面的代码,但我无法绑定(bind)文本,我怎样才能将资源内部文本 bloc
我刚刚完成了 Space Shooter 教程,由于没有 GUIText 对象,所以我创建了 UI.Text 对象并进行了相应的编码。它在统一播放器中有效,但在构建 Web 应用程序后无效。我花了一段
我有这个代码: - (IBAction)setButtonPressed:(id)sender { NSUserDefaults *sharedDefaults = [[NSUserDefau
抱歉标题含糊不清,但我想不出我想在标题中做什么。无论如何,对于图像上的文本,我使用了 JLabel 文本并将其添加到图标中。 JLabel icon = new JLabel(new Imag
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我在将 Twitter 嵌入到我从 HTML 5 转换的 wordpress 运行网站时遇到问题。 我遇到的问题是推文不是我的自定义字体... 这是我无法使用任何 css 定位的 HTML 代码,我正
我正在尝试找到解决由于使用以下形式的代码而导致的冗余字符串连接问题的最佳方法: logger.debug("Entering loop, arg is: " + arg) // @1 在大多数情况下,
我写了这个测试 @Test public void removeRequestTextFromRouteError() throws Exception { String input = "F
我目前正在创建一个正则表达式来拆分所有匹配以下格式的字符串:&[文本],并且需要获取文本。字符串可能类似于:something &[text] &[text] everything &[text] 等
有没有办法将标题文本从一个词变形为另一个词,同时保留两个词中使用的字母?我看过的许多 css 文本动画大多是视觉的,很少有旋转整个单词的。 我想要做的是从一个词过渡,例如“BEACH”到“CHANGE
总结matplotlib绘图如何设置坐标轴刻度大小和刻度。 上代码: ?
我在容器 (1) 中创建了容器 (2)。你能帮忙如何向容器(1)添加文本吗?下面是我的代码 return Scaffold( body: Padding( padding: c
我似乎找不到任何人或任何人这样做过。我试图限制我们使用的图像数量,并想创建一个带有渐变作为其“颜色”的文本,并在其周围设置渐变轮廓/描边 到目前为止,我还没有看到任何将两者结合在一起的东西。 我可以自
我正在为视频游戏暗黑破坏神 2 使用 discord.py 构建一个不和谐机器人。其中一项功能要求机器人从暗黑破坏神 2 屏幕截图中提取项目的名称和属性。我目前正在为此使用 pytesseract,但
我很难弄清楚如何旋转 strip.text theme 中的属性来自 ggplot2 .我使用的是 R 版本 3.4.2 和 ggplot2 版本 2.2.1。 以下是 MWE 的数据。 > dput
我是一名优秀的程序员,十分优秀!