Frage Verwenden Sie Python, um Zeilen in Dateien zu entfernen, die mit einer Oktothorpe beginnen?


Das scheint eine einfache Frage zu sein, aber ich kann mein Problem nicht genau bestimmen. Ich versuche, alle Zeilen in einer Datei zu löschen, die mit einem octothorpe (#) mit Ausnahme der ersten Zeile beginnen. 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. Weiß jemand, was mein Problem ist? Vielen Dank!


11
2017-08-08 17:07


Ursprung


Antworten:


Sie schreiben nicht die erste Zeile:

for i, line in enumerate(input_file):
    if i == 0:
        output.write(line)
    else:
        if not line.startswith('#'):
            output.write(line)

Denken Sie auch daran enumerate (wie die meisten Dinge) beginnt bei Null.

Etwas prägnanter (und nicht die Ausgangszeile wiederholend):

for i, line in enumerate(input_file):
    if i == 0 or not line.startswith('#'):
        output.write(line)

15
2017-08-08 17:09



Ich würde es hier nicht aufzählen. Sie müssen nur entscheiden, welche Zeile die erste Zeile ist und welche nicht. Dies sollte leicht genug sein, um damit umzugehen, indem einfach die erste Zeile geschrieben wird und dann eine for-Schleife verwendet wird, um bedingt Zeilen zu schreiben, die nicht mit einem '#' beginnen.

def removeComments(inputFileName, outputFileName):

    input = open(inputFileName, "r")
    output = open(outputFileName, "w")

    output.write(input.readline())

    for line in input:
        if not line.lstrip().startswith("#"):
            output.write(line)

    input.close()
    output.close()

Danke an twopoint718 für den Hinweis auf den Vorteil von lstrip.


6
2017-08-08 17:29



Vielleicht möchten Sie Zeilen von der Ausgabe weglassen, wo die erste ist Nicht-Leerzeichen Charakter ist ein Oktothorpe:

for i, line in enumerate(input_file):
    if i == 0 or not line.lstrip().startswith('#'):
        output.write(line)

(Beachten Sie den Anruf an lstrip)


3
2017-08-08 17:17