从python中的.txt文件中提取电子邮件地址

时间:2018-01-08 16:03:14

标签: python string python-3.x parsing

我想从Python中的几个文本文件中解析出电子邮件地址。在第一次尝试中,我尝试从字符串列表('2To whom correspondence should be addressed. E-mail: joachim+pnas@uci.edu.\n')获取包含电子邮件地址的以下元素。

当我尝试通过i.find("@") == 0找到包含电子邮件地址的列表元素时,它不会给我content[i]。我误解了.find()功能吗?有更好的方法吗?

from os import listdir

TextFileList = []
PathInput = "C:/Users/p282705/Desktop/PythonProjects/ExtractingEmailList/text/"

# Count the number of different files you have!
for filename in listdir(PathInput):
    if filename.endswith(".txt"):  # In case you accidentally put other files in directory
        TextFileList.append(filename)

for i in TextFileList:
    file = open(PathInput + i, 'r')
    content = file.readlines()
    file.close()

for i in content:
    if i.find("@") == 0:
        print(i)

3 个答案:

答案 0 :(得分:4)

在Python中检查字符串是否包含字符的标准方法是使用in operator。在你的情况下,那将是:

for i in content:
    if "@" in i:
        print(i)

find方法,就像你在哪里一样,返回@字符所在的位置,从0开始,如Python official documentation中所述

例如,在字符串abc@google.com中,它将返回3.如果找不到该字符,它将返回-1。等效代码为:

for i in content:
    if i.find("@") != -1:
        print(i)

但是,这被视为unpythonic,并且首选in运营商用途。

答案 1 :(得分:0)

python中的

'Find'函数返回字符串中该字符的索引号。也许你可以试试这个?

list = i.split(' ') # To split the string in words
for x in list:    # search each word in list for @ character
    if x.find("@") != -1:
        print(x)

答案 2 :(得分:0)

如果找到要搜索的子字符串,

Find将返回索引。这对于你想要做的事情是不正确的。

您最好使用正则表达式或RE来搜索@的出现。在您的情况下,您可能会遇到每行有多个电子邮件地址的情况(再次,我不知道您的输入数据,因此我无法猜测)

这些方面的某些内容会让你受益:

import re
for i in content:
    findEmail = re.search(r'[\w\.-]+@[\w\.-]+', i)
    if findEmail:
     print(findEmail.group(0))

您需要针对有效的电子邮件地址进行调整...我不完全确定您是否可以使用+ ...等符号