Ich möchte eine Zeichenfolge in einer Datei mit einem Python-Programm namens speichern Failed.py
Folgendes habe ich bisher:
myFile = open('today','r')
ips = {}
for line in myFile:
parts = line.split(' ')
if parts[1] == 'Failure':
if parts[0] in ips:
ips[pars[0]] += 1
else:
ips[parts[0]] = 0
for ip in [k for k, v in ips.iteritems() if v >=5]:
#write to file called Failed.py
python
python-2.7
Stefan
quelle
quelle
Antworten:
file = open('Failed.py', 'w') file.write('whatever') file.close()
Hier ist eine pythonischere Version, die die Datei automatisch schließt, selbst wenn es eine Ausnahme im umschlossenen Block gab:
with open('Failed.py', 'w') as file: file.write('whatever')
quelle
file
ist kein geschütztes Wort in Python, es muss nicht verwendet werdenfile_
, es sei denn, Ihr Codierungsstil-Guide erfordert das_
Suffix für Variablen in dem Kontext (Datei, Funktion, Klasse, Methode), in dem dies stattfindet.file
ist eingebaute Funktion wie viele andere . Es wird nicht empfohlen , diese integrierten Funktionen mit anderen Variablen zu beschatten.file
wurde in Python 3 veraltet und entfernt, daher ist es vollkommen in Ordnung, es dort zu verwenden. Ich habe das 2.7-Tag auf der Frage nicht gesehen und benutze normalerweise Python 3 ...Sie müssen die Datei erneut mit öffnen
open()
, diesmal jedoch,'w'
um anzuzeigen, dass Sie in die Datei schreiben möchten. Ich würde auch empfehlen,with
um sicherzustellen, dass die Datei geschlossen wird, wenn Sie mit dem Schreiben fertig sind.with open('Failed.txt', 'w') as f: for ip in [k for k, v in ips.iteritems() if v >=5]: f.write(ip)
Natürlich möchten Sie möglicherweise Zeilenumbrüche oder andere Formatierungen in Ihre Ausgabe aufnehmen, aber die Grundlagen sind wie oben.
Das gleiche Problem beim Schließen Ihrer Datei gilt für den Lesecode. Das sollte so aussehen:
ips = {} with open('today','r') as myFile: for line in myFile: parts = line.split(' ') if parts[1] == 'Failure': if parts[0] in ips: ips[pars[0]] += 1 else: ips[parts[0]] = 0
quelle
Sie können diese Funktion verwenden:
def saveListToFile(listname, pathtosave): file1 = open(pathtosave,"w") for i in listname: file1.writelines("{}\n".format(i)) file1.close() # to save: saveListToFile(list, path)
quelle
myFile = open('today','r') ips = {} for line in myFile: parts = line.split() if parts[1] == 'Failure': ips.setdefault(parts[0], 0) ips[parts[0]] += 1 of = open('failed.py', 'w') for ip in [k for k, v in ips.iteritems() if v >=5]: of.write(k+'\n')
Schauen Sie sich setdefault an, es macht den Code ein wenig lesbarer. Anschließend sichern Sie Ihre Daten mit der Schreibmethode des Dateiobjekts.
quelle
close
. Sie müssen dies in einem endgültigen Block tun, um sich gegen Ausnahmen zu verteidigen. Der idiomatische Weg ist die Verwendung eineswith
Kontext-Handlers.