我想从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)
答案 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)
'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))
您需要针对有效的电子邮件地址进行调整...我不完全确定您是否可以使用+ ...等符号