【问题标题】:How to extract specific emails from a text file如何从文本文件中提取特定电子邮件
【发布时间】:2017-09-07 02:27:54
【问题描述】:

python 新手并坚持这一点!

我有一个大文本文件,其中仅包含来自不同域的电子邮件。假设我只想提取 gmail 和 hotmail。

我能够做到这一点,但结果却混在一起了。

filename = input('Enter filename to open: ')
try:
    filename = open(filename)
except:
    print('File cannot be opened: ', filename)
exit()
import re
for line in filename:
    line = line.rstrip()
    x = re.findall('\S+@gmail.com',  line)
    if len(x) > 0:
        print(x)
    y = re.findall('\S+@hotmail.com',  line)
    if len(y) > 0:
        print(y)

我的目标是让它打印出所有的 gmail 电子邮件,然后列出它找到的 gmail 电子邮件地址的数量。然后我希望它列出所有的 hotmail 帐户并列出它找到了多少个 hotmail 帐户。有道理?

【问题讨论】:

  • 我认为这是因为您正在逐行搜索。这意味着它将打印该行中的 gmail 地址,然后打印该行中的 hotmail 地址,然后转到下一行。而不是打印文件中的所有gmail地址,然后打印文件中的所有hotmail地址。除非那是你想做的。
  • 考虑使用模块mailbox (docs.python.org/3.5/library/mailbox.html) 而不是自己搞乱邮件消息。

标签: python python-3.x email text extract


【解决方案1】:

@JAW 关于你逐行搜索的问题是绝对正确的。由于您使用的是re.findall,因此没有理由需要遍历这些行。您所要做的就是:

import re

filename = input('Enter filename to open: ')

try:
    file = open(filename)
except:
    print('File cannot be opened: ', filename)
    exit()

emails = file.read()
x = re.findall('\S+@gmail.com',  emails)
if len(x) > 0:
    print(x)
    # or print("\n".join(x)) for list-like printing 

y = re.findall('\S+@hotmail.com',  emails)
if len(y) > 0:
    print(y)
    # or print("\n".join(y)) for list-like printing

【讨论】:

  • 意识到这不会打印出整行。我该怎么做呢?我正在查看的文本文件通常只是电子邮件,有时包含密码。我需要取出那些有特定电子邮件的邮件,然后再取出该行的其他邮件。
  • 为了让您的工作简单易行,您可以使用分组。 re.compile('(\S+@gmail.com) *(\w+)')
【解决方案2】:

不要在找到地址时打印它们,而是将它们收集在两个列表中并在最后打印列表:

gmail = []
hotmail = []

for line in filename: #filename is a BAD name for this variable
    address = re.findall('\S+@gmail.com', line)
    if address: gmail.extend(address)
    address = re.findall('\S+@hotmail.com', line)
    if address: hotmail.extend(address)

print(gmail)
print(hotmail)

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2018-03-13
    • 2014-03-23
    • 2011-05-15
    • 2019-06-08
    • 2018-07-30
    • 1970-01-01
    相关资源
    最近更新 更多