Hintergrund:Entfernen von Objekten aus einer Liste in Python folgende Gültigkeitsprüfung
Ich bin ein kleines Skript zu schreiben, das als eines seines Arguments erfordert, eine E-Mail-Adressliste in einer Datei. Das Skript wird sie weiter verwenden, um die E-Mail-Adresse über eine Telnet-Verbindung zu einem SMTP-Server zu verwenden, so dass sie syntaktisch gültig sein müssen; folglich habe ich eine Funktion legen Sie die E-Mail-Adresse Gültigkeit zu überprüfen (übrigens diese regex nicht perfekt sein kann, ist aber nicht im Mittelpunkt der Frage, bitte Geduld mit mir Wird wahrscheinlich gelockert werden.):
def checkmailsyntax(email):
match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', email)
if match == None:
return True
die main() Programm geht auf die Eingabedatei als Argument zu lesen (in argparse) und legen sie sie in einem (derzeit global) Liste:
with open(args.targetfile) as targets:
target_email_list = targets.readlines()
ich es dachte wäre toll für das Skript ein automatisch löschen E-Mail-Adresse aus der Liste (anstatt nur zu sagen, es war falsch, was es zu tun war), wenn die checkmailsyntax
-Funktion fehlgeschlagen ist. Diese gereinigte Liste könnte dann weitergehen zu syntaktisch gültigen E-Mail-Adressen an den SMTP-Server senden:
for i in target_email_list:
if checkmailsyntax(i):
target_email_list.remove(i)
Fehlercode überprüft, die ich eingeordnet habe, sowohl vor als auch nach dem Löschelement Schnipsel zu sehen, ob es es Arbeit tun hat ist:
for i in target_email_list:
print i
Das Problem: die Ausgabe des Codes ist also:
Vor Löschelement snippet (und den gesamten Inhalt der Datei eingereicht):
[email protected]
[email protected]
[email protected]
noemail.com
incorrectemail.com
[email protected]
pretendemail.com
wrongemail.com
[email protected]
badlywrong.com
[email protected]
Nach Element löschen Schnipsel:
[email protected]
[email protected]
[email protected]
incorrectemail.com
[email protected]
wrongemail.com
[email protected]
[email protected]
Also ich ziemlich ratlos bin, warum 'noemail.com'
, 'pretendemail.com'
und 'badlywrong.com'
entfernt wurden und noch 'incorrectemail.com'
und 'wrongemail.com'
nicht. Es tritt auf, wenn in der Datei nacheinander zwei syntaktisch falsche E-Mails vorhanden sind.
Kann mir jemand in die richtige Richtung zeigen?
Ah ja, es ist wahrscheinlich ein Duplikat. Ich wusste nicht, wonach ich suchte. Danke Bhargav. – Ian