0

我正在使用此代码在特定文件中搜索电子邮件并将它们写入另一个文件。我使用了“in”运算符来确保电子邮件不重复。但是此代码不会在该 for line in f:行之后执行。谁能指出我在这里犯的错误?

tempPath = input("Please Enter the Path of the File\n")
temp_file = open(tempPath, "r")
fileContent = temp_file.read()
temp_file.close()

pattern_normal = re.compile("[-a-zA-Z0-9._]+@[-a-zA-Z0-9_]+.[a-zA-Z0-9_.]+")

pattern_normal_list = pattern_normal.findall(str(fileContent))

with open('emails_file.txt', 'a+') as f:            
    for item in pattern_normal_list:            
        for line in f:
            if line in item:
                print("duplicate")
            else:
                print("%s" %item)
                f.write("%s" %item)
                f.write('\n')
4

2 回答 2

1

新解决方案:

tempPath = input("Please Enter the Path of the File\n")
temp_file = open(tempPath, "r")
fileContent = temp_file.read()
temp_file.close()

pattern_normal = re.compile("[-a-zA-Z0-9._]+@[-a-zA-Z0-9_]+.[a-zA-Z0-9_.]+")

addresses = list(set(pattern_normal.findall(str(fileContent))))
with open('new_emails.txt', 'a+') as f:
    f.write('\n'.join(addresses))

我认为你的逻辑错误的,这有效:

addresses = ['test@wham.com', 'heffa@wham.com']

with open('emails_file.txt', 'a+') as f:
    fdata = f.read()
    for mail in addresses:
        if not mail in fdata:
            f.write(mail + '\n')

没有过多阅读您的代码,看起来您正在逐行循环,检查您还循环通过的地址是否存在于该行中,如果您没有将您的电子邮件附加到它?但是在 100 行的 99% 中,地址不会在行中,因此您会得到不需要的添加。

我的代码片段的输出:

[Torxed@faparch ~]$ cat emails_file.txt 
test@wham.com
Torxed@whoever.com
[Torxed@faparch ~]$ python test.py 
[Torxed@faparch ~]$ cat emails_file.txt 
test@wham.com
Torxed@whoever.com
heffa@wham.com
[Torxed@faparch ~]$ 
于 2013-02-07T11:08:43.887 回答
-2
for line in f:

你不应该先调用 f.readlines() 吗?

lines = f.readlines()
for line in lines:

检查这个。

于 2013-02-07T11:13:29.133 回答