2

私の Python スクリプトでは、特定の列を text_file から new_text_file に で区切って書き込み,ます。これは、new_text_file が後で csv_file になるためです。new_text_file には空白行が残っています。これは、ファイルから削除する必要がある書き込みをスキップした行のためです。

エラーが発生するため、.strip()orを使用できません: 。.rstrip()AttributeError: '_io.TextIOWrapper' object has no attribute 'strip'

ip_file.write("".join(line for line in ip_file if not line.isspace()))エラーが発生するため使用できません: UnsupportedOperation: not readable

sysとのインポートも試しre、このサイトで見つかった他のすべての回答を試しましたが、それでもエラーが返されます。

私のコードは次のとおりです。

for ip in open("list.txt"):
    with open(ip.strip()+".txt", "a") as ip_file:
        for line in open("data.txt"):
            new_line = line.split(" ")
            if "blocked" in new_line:
                if "src="+ip.strip() in new_line:
                    #write columns to new text file
                    ip_file.write(", " + new_line[11])
                    ip_file.write(", " + new_line[12])
                    try:
                        ip_file.write(", " + new_line[14] + "\n")
                    except IndexError:
                        pass

結果の ip_file は次のようになります。

, dst=00.000.00.000, proto=TCP, dpt=80
, dst=00.000.00.000, proto=TCP, dpt=80
, dst=00.000.00.000, proto=TCP, dpt=80

, dst=00.000.00.000, proto=TCP, dpt=80
, dst=00.000.00.000, proto=TCP, dpt=80

上記のスクリプトの最後の行の下、ループ内でコーディングしていました。は私のスクリプトにあり、すべてnew_text_fileip_filePython である必要があります。

質問:の空白行を削除する別の方法はありip_fileますか? または、それらが書き込まれるのを防ぎますか?

4

1 に答える 1

1

私はあなたが言っていることを理解していると思います。これらの変更を行ってみてください:

        for line in open("data.txt"):
            new_line = line.rstrip().split()
                                    ^^^^^^^^^
            if "blocked" in new_line:
                if "src="+ip.strip() in new_line:
                    #write columns to new text file
                    ip_file.write(", " + new_line[11])
                    ip_file.write(", " + new_line[12])
                    try:
                        ip_file.write(", " + new_line[14])
            #                                                      ^^^^
                    except IndexError:
                        pass
                    ip_file.write("\n")
            #           

問題は、new_line[14]存在するときにすでに改行が含まれていたため、2 つの改行を追加していたようです。上記のコードは、改行を分割する前に行から削除し、内側の for ループの最後に改行を 1 つ追加します。

于 2013-08-22T15:02:30.027 に答える