我有一个文件email.txt,其电子邮件地址如下:
詹姆斯,布莱恩< brian.james@abc.com> ;;阿塔尔,丹尼尔< Daniel.Attar@abc.com> ;;亚历克斯,詹姆斯< james.alex@abc.com> ;;时尚,伊丽莎白< elizabeth.trendy@abc.com> ;;琼斯,加里< Gary.Jones@abc.com> ;;骨头,拜伦< byron.bones@abc.com> ;;
我想将电子邮件地址写入一个.csv文件中,如下所示:
brian.james@abc.com
daniel.attar@abc.com
...
byron.bones@abc.com
我写了一个Python脚本,如下所示:
fn1 = "email.txt"
f1 = open(fn1,"r")
f1r1 = f1.readlines()
f1r2 = [i.strip() for i in f1r1]
f1r3 = [i.split(";") for i in f1r2]
s1 = f1r3[0]
a = open("ef.csv","w")
for i in s1:
j = i.split("<")
a.write(j[1].strip(">")+"\n")
a.close()
有没有更好,更有效或更优雅的方式来写这个?
答案 0 :(得分:1)
您可以考虑将文本文件的内容作为单个字符串读取,然后使用re
从该字符串中提取电子邮件。
在这种情况下,您的电子邮件格式看起来非常具体,因此下面的正则表达式也是特定的。但要意识到,能够找到符合RFC 5322标准的电子邮件地址(&#34;官方标准&#34;电子邮件地址格式)的正则表达式是几百个字符长。有关详情,请参阅Jan Goyvaerts的How to Find or Validate an Email Address。
总之...
import re
with open('emails.txt', 'r') as file:
# Produces a single string, `emails`
emails = file.read().replace('\n', '')
regex = re.compile('\S+\.\S+@abc\.com')
for email in regex.findall(emails):
print(email)
# brian.james@abc.com
# Daniel.Attar@abc.com
# james.alex@abc.com
# elizabeth.trendy@abc.com
# Gary.Jones@abc.com
# byron.bones@abc.com
Regex演练:此正则表达式假定每封电子邮件都采用非常具体的形式:something<dot>somethingelse<at>abc.com
。
\S+
是一个或多个非空白字符\.
是一个文字句号(反斜杠的元字符)