Verwendung von Python zum entfernen von Zeilen in Dateien, die beginnen mit einer Raute?
Wie es scheint, ein geradlinig Frage zu sein, aber ich kann nicht scheinen, Sie zu lokalisieren mein problem. Ich bin versucht, löschen Sie alle Zeilen in einer Datei, die beginnen mit einer Raute (#) außer der ersten Zeile. Hier ist die Schleife, mit der ich arbeite:
for i, line in enumerate(input_file):
if i > 1:
if not line.startswith('#'):
output.write(line)
Der obige code scheint nicht zu funktionieren. Hat jemand erkannt, was mein problem ist? Danke!
Können Sie uns sagen, was es tut, das nicht richtig?
Ich gehe davon aus, Sie möchten, dass Linien, die andere als whitespace beginnen mit einer Raute. Siehe meine Antwort.
Bin ich die einzige, die nicht wusste, was eine Raute war?
+1 für die Erklärung, was eine Raute ist. 🙂
Eine weitere Möglichkeit, sed benutzen:
Ich gehe davon aus, Sie möchten, dass Linien, die andere als whitespace beginnen mit einer Raute. Siehe meine Antwort.
Bin ich die einzige, die nicht wusste, was eine Raute war?
+1 für die Erklärung, was eine Raute ist. 🙂
Eine weitere Möglichkeit, sed benutzen:
sed '/^#.*/d' old.txt > new.txt
InformationsquelleAutor drbunsen | 2011-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du nicht schreiben der ersten Zeile:
Beachten Sie auch, dass
enumerate
(wie die meisten Dinge), die bei null beginnt.Etwas prägnanter (und nicht zu wiederholen, dass der line-Ausgang):
or not
Aussage!!!InformationsquelleAutor Ned Batchelder
Ich würde nicht die Mühe mit dem aufzählen hier. Sie müssen nur Sie entscheiden, welche Zeile ist die erste Zeile und was nicht. Dies sollte einfach genug, um damit umzugehen, indem Sie einfach das schreiben der ersten Zeile aus und dann mit einer for-Schleife bedingt schreiben zusätzliche Linien, die nicht mit einem '#'.
Dank twopoint718 für den Hinweis auf den Vorteil der Verwendung lstrip.
InformationsquelleAutor Dunes
Vielleicht möchten Sie weglassen, die Zeilen aus der Ausgabe, in denen der erste nicht-whitespace - Zeichen ist eine Raute:
(Hinweis: der Aufruf
lstrip
)lstrip
Methode. In meinem Fall, es ist nie Leerzeichen vor der Raute, ich denke also, ich bin sicher, nur mit denstartswith
Methode.Dies nicht schreiben Sie die erste Linie.
Ich nahm an, dass das überspringen der ersten Zeile war die beabsichtigte und erwartete Verhalten: "ich versuche zum löschen aller Zeilen in einer Datei, die beginnen mit einer Raute (#) außer der ersten Zeile". Ich werde es ändern mine zu mirror ' s Ned oben.
InformationsquelleAutor Chris