蟒蛇新手并坚持下去!
我有一个大型文本文件,只包含来自各个域的电子邮件。说我想拔出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帐户。合理?
答案 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)