1

私は小さなスクリプトを持っています:

#!/usr/bin/python3.2
#takes the bad_emails out of full_emails and leaves us with good_emails

#This is a manually generated list of bad emails (bounce backs)
bad_list = []
with open("bad_emails.txt","r") as bad:
    for line in bad.readlines():
        bad_list.append(line)
#this is a list of ALL email addresses output by AcyMailing
full_emails = []
with open("full_emails.txt","r") as full:
    for email in full.readlines():
        if email in bad_list:
            pass
        else:
            full_emails.append(email)

#this is a final list containing only the email addresses with want
good_list = []
with open("good_emails","w") as good:
    for email in full_emails:
        good.write(email)

私がやろうとしているのは簡単です。JoomlaのAcyMailingというメーラープログラムからメールアドレスのリストを取得してエクスポートします。次の形式になります: "abc@abc.com" "def@def.com" "etc@etc.etc"

上記のスクリプトは機能しますが(「悪いメール」を取り除き、「良いメール」だけを残します。AcyMailing(Joomla)が使用するように、各メールを引用符で囲む方法をまだ見つけていません。私」多くの人がそのようなタスクに正規表現を使用しているのを見てきましたが、それがPythonでこれを行う唯一の方法ですか?

4

2 に答える 2

0

文字列を引用符で囲むことができるはずです。

good.write('"' + email.strip() + '"\n')

または、次を使用できます.format

good.write('"{}"\n'.format(email.strip()))
于 2012-11-03T08:13:32.150 に答える
0

のforループ.readlines()は冗長です。あなたはset.difference()良い電子メールを見つけるために使うことができます:

# read all emails from the file, one email per line, skip blank lines
read_emails = lambda file: (line.strip() for line in file if line.strip())

with open('bad_emails.txt') as bad, open('full_emails.txt') as full:
     good_emails = set(read_emails(full)).difference(read_emails(bad))

with open('good_emails.txt', 'w') as good:
     good.writelines('"%s"\n' % email for email in good_emails)
于 2012-11-03T08:53:32.490 に答える