将分号分隔的电子邮件地址写入csv文件

时间:2017-11-17 03:04:20

标签: python string csv email

我有一个文件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()

有没有更好,更有效或更优雅的方式来写这个?

1 个答案:

答案 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+是一个或多个非空白字符
  • \.是一个文字句号(反斜杠的元字符)