如何从文本文件中提取特定电子邮件

时间:2017-09-07 02:27:55

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

蟒蛇新手并坚持下去!

我有一个大型文本文件,只包含来自各个域的电子邮件。说我想拔出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帐户。合理?

2 个答案:

答案 0 :(得分:0)

@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

答案 1 :(得分:-1)

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

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)