Sie haben die erste Datei als "r+"
öffnen, um zu lesen und zu schreiben, etwa so:
f = open(filename,"r+")
for line in f:
e = line.split(',')
if len(e) > 28:
with open(filename2, "a") as text_file:
text_file.write(line.encode('cp1252'))
f.seek(0)
f.truncate()
f.close()
Ich habe auch den Code effizienter, da sie über die Zeilen iterieren sollte statt Kopieren Sie sie zur Seite. Ein noch effizienteren Ansatz wäre dies:
with open(filename,"r+") as file1, open(filename2, "a") as file2:
for line in f:
if line.count(',') > 27:
file2.write(line.encode('cp1252'))
file1.truncate(0)
diese Weise können Sie jede Iteration die Datei öffnen nicht, und da Sie nicht die geteilten Werte verwenden, können Sie nur die Kommas zählen (,
) und vergleichen bis 27 statt nur 28
entfernen der kopierten Linien
Wenn Sie nur die kopierten Linien entfernen möchten, und die Datei nicht leer ist, haben Sie keine Möglichkeit andere als die gesamte Datei in den Speicher zu kopieren oder Verwenden Sie eine tempfile.
, dass so, wie es in dem Speicher durch Kopieren zu tun ist:
with open(filename,"r+") as file1, open(filename2, "a") as file2:
file_lines = file1.readlines()
file1.seek(0)
file1.truncate()
for line in file_lines:
if line.count(',') > 27:
file2.write(line.encode('cp1252'))
else:
file1.write(line)
Bitte stellen Sie sicher, dass eine Codierung angeben, wenn Sie Python 3.X verwenden
im Versuch, es zu bekommen, so dass nur die kopierten Zeilen gelöscht werden, aber wenn ich über den ersten Code verwende, leert er die gesamte erste Textdatei Wie ändere ich, damit nur die ausgewählten Zeilen gelöscht werden? – gdogg371
@ gdogg371 Meine Antwort entsprechend aktualisiert. – Bharel
Ihr aktualisierter Code ist falsch und beschädigt den Inhalt von 'file1'. – alexis