用Python删除以井号开头的文件行?

15 投票
3 回答
32434 浏览
提问于 2025-04-16 23:08

这个问题看起来很简单,但我就是找不到我的问题所在。我想要删除文件中所有以井号(#)开头的行,除了第一行。这里是我正在使用的循环代码:

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

上面的代码似乎不太管用。有没有人知道我的问题出在哪里?谢谢!

3 个回答

4

也许你想在输出中省略那些第一 个非空白字符是井号(#)的行:

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

(注意这里调用了 lstrip 函数)

10

在这里,我觉得用enumerate没必要。你只需要判断哪一行是第一行,哪一行不是。其实这很简单,你可以先把第一行写出来,然后用一个循环来判断其他行,如果那行不是以'#'开头,就把它写出来。

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的好处。

19

你没有写出第一行:

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)

撰写回答