web-dev-qa-db-ja.com

Pythonを使用して、オクトソープで始まるファイルの行を削除しますか?

これは簡単な質問のように思えますが、問題を特定できないようです。最初の行を除いて、オクトソープ(#)で始まるファイル内のすべての行を削除しようとしています。これが私が取り組んでいるループです:

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

上記のコードは機能していないようです。誰かが私の問題が何であるか知っていますか?ありがとう!

14
drbunsen

あなたは最初の行を書いていません:

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)
19
Ned Batchelder

ここで列挙することは気にしません。最初の行とそうでない行を決定するだけで済みます。これは、最初の行を書き出してから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()

Lstripを使用する利点を指摘してくれたtwopoint718に感謝します。

6
Dunes

最初の非空白文字がオクトソープである行を出力から省略したい場合があります。

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

lstripの呼び出しに注意してください)

4
Chris