Использовать Python для удаления строк в файлах, начинающихся с октофорпа? - PullRequest
13 голосов
/ 08 августа 2011

Это кажется простым вопросом, но я не могу точно определить мою проблему.Я пытаюсь удалить все строки в файле, которые начинаются с октофорпа (#), кроме первой строки.Вот цикл, с которым я работаю:

for i, line in enumerate(input_file):
    if i > 1:
        if not line.startswith('#'):
            output.write(line)

Код выше, похоже, не работает.Кто-нибудь знает, в чем моя проблема?Спасибо!

Ответы [ 3 ]

18 голосов
/ 08 августа 2011

Вы не пишете первую строку:

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

Имейте в виду также, что enumerate (как и большинство вещей) начинается с нуля.

Немного более кратко (и не повторяя строку вывода):

for i, line in enumerate(input_file):
    if i == 0 or not line.startswith('#'):
        output.write(line)
6 голосов
/ 08 августа 2011

Я бы не стал здесь перечислять. Вам нужно только решить, какая строка является первой строкой, а какая нет. Это должно быть достаточно легко, если просто написать первую строку, а затем использовать цикл for для условной записи дополнительных строк, которые не начинаются с «#».

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()

Спасибо twopoint718 за указание на преимущество использования lstrip.

4 голосов
/ 08 августа 2011

Может быть, вы хотите пропустить строки из выходных данных, где первый непробельный символ является октофором:

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

(обратите внимание на вызов lstrip)

...