开发者

Use Python to remove lines in a files that start with an octothorpe?

开发者 https://www.devze.com 2023-03-26 12:47 出处:网络
This seems like a straight-forward question but I can\'t seem to pinpoint my problem. I am trying to delete all lines in a file that start with an octothorpe (#) except the first line. Here is the loo

This seems like a straight-forward question but I can't seem to pinpoint my problem. I am trying to delete all lines in a file that start with an octothorpe (#) except the first line. Here is the loop I am working with:

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

The above co开发者_开发技巧de doesn't seem to work. Does anyone known what my problem is? Thanks!


You aren't writing out the first line:

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

Keep in mind also that enumerate (like most things) starts at zero.

A little more concisely (and not repeating the output line):

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


I wouldn't bother with enumerate here. You only need it decide which line is the first line and which isn't. This should be easy enough to deal with by simply writing the first line out and then using a for loop to conditionally write additional lines that do not start with a '#'.

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

Thanks to twopoint718 for pointing out the advantage of using lstrip.


Maybe you want to omit lines from the output where the first non-whitespace character is an octothorpe:

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

(note the call to lstrip)

0

精彩评论

暂无评论...
验证码 换一张
取 消