【发布时间】:2013-11-19 23:25:24
【问题描述】:
问。编写一个搜索引擎,它将获取一个文件(如 html 源页面)并提取所有电子邮件地址。然后它将它们打印在有序列表中。该文件可能包含很多乱七八糟的文本(即asda@home 无效.. 文件中可能有很多@'s 在电子邮件以外的角色中!)
出于测试目的,这是我一直在使用的文本文件:
askdalsd
asd
sad
asd
asd
asd
ad
asd
asda
da
moi1990@gmail.com
masda@sadas
223@home.ca
125512@12451.cpm
domain@name.com
asda
sda
as
da
ketchup@ketchup@#%@#.com
onez!es@gomail.com
asdasda@@@@@email.com
asda@asdasdaad.ca
moee@gmail.com
这就是我目前所拥有的:
import os
import re
import sys
def grab_email(file):
email_pattern = re.compile(r'\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b',re.IGNORECASE)
found = set()
if os.path.isfile(file):
for line in open(file, 'r'):
found.update(email_pattern.findall(line))
for email_address in found:
print (email_address)
if __name__ == '__main__':
grab_email(sys.argv[1])
grab_email('email_addresses.txt')
现在我遇到的问题是,在某个点之后,程序崩溃了。这是输出:
125512@12451.cpm
es@gomail.com
asda@asdasdaad.ca
223@home.ca
moee@gmail.com
moi1990@gmail.com
domain@name.com
Traceback (most recent call last):
File "D:/Sheridan/Part Time/TELE26529 Linux Architecture w. Network Scripting/Python Assignment 3.5/question1.py", line 17, in <module>
grab_email('email_addresses.txt')
File "D:/Sheridan/Part Time/TELE26529 Linux Architecture w. Network Scripting/Python Assignment 3.5/question1.py", line 14, in grab_email
grab_email(sys.argv[1])
IndexError: list index out of range
我在这里做错了什么,我该如何解决这个问题?如何更有效地处理这些异常?
【问题讨论】:
-
你在命令行传递什么?
-
@squiguy 我不是。我直接从脚本本身运行它。
标签: python regex list email search