14

这似乎是一个直截了当的问题,但我似乎无法确定我的问题。我正在尝试删除文件中除第一行外以八字形 (#) 开头的所有行。这是我正在使用的循环:

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

上面的代码似乎不起作用。有谁知道我的问题是什么?谢谢!

4

3 回答 3

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)
于 2011-08-08T17:09:38.380 回答
9

我不会在这里枚举。你只需要它决定哪一行是第一行,哪一行不是。这应该很容易处理,只需写出第一行,然后使用 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 的优势。

于 2011-08-08T17:29:38.817 回答
4

也许您想从输出中省略第一个非空白字符是 octothorpe 的行:

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

(注意对 的调用lstrip

于 2011-08-08T17:17:32.473 回答