Использовать Python для удаления строк в файлах, начинающихся с октофорпа?

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

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

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

3 ответа

Решение

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

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)

Я бы не стал перечислять здесь. Вам нужно только решить, какая строка является первой строкой, а какая нет. Это должно быть достаточно просто, чтобы просто написать первую строку, а затем использовать цикл 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.

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

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

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

Другие вопросы по тегам