3

ファイル 1 は次のようにフォーマットされます。

1111111111
2222222222

ファイル 2 は次のようにフォーマットされます。

3333333333:4444444444
1111111111:2222222222

ファイル 1 の内容を取得して、ファイル 2 のコロンの右側にある内容のみと一致するかどうかを確認する方法を見つけようとしています。最終的な目標は、一致する場合にファイル 2 の FULL 行を削除することです。

標準コマンドを使用してファイル 2 を切り取ることができるので、まったく同じ形式にできます。問題は、88888:99999 形式の完成したファイルが必要であり、それらを正しい順序に戻すためだけに分割するのは複雑すぎるように思われることです。

ループ、正規表現、セット、リストのネストを試みましたが、頭が回転しています。

これが理にかなっていることを願っています。前もって感謝します。

Traceback (most recent call last):
 File "test.py", line 17, in <module>
   if line.split(":")[1] in keys:
IndexError: list index out of range
4

2 に答える 2

3

行の 2 番目の部分がファイル 1の任意の値と一致する場合にファイル 2 の行を削除すると仮定すると、次のようになります。

# Warning: Untested code ahead
with open("file1", "r") as f1:
    # First, get the set of all the values in file 1
    # Sets use hash tables under the covers so this should
    # be fast enough for our use case (assuming sizes less than
    # the total memory available on the system)
    keys = set(f1.read().splitlines())

# Since we can't write back into the same file as we read through it
# we'll pipe the valid lines into a new file
with open("file2", "r") as f2:
    with open("filtered_file", "w") as dest:
        for line in f2:
            line = line.strip()  # Remove newline
            # ASSUMPTION: All lines in file 2 have a colon
            if line.split(":")[1] in keys:
                continue
            else:
                dest.writeline(line)
于 2012-08-25T02:59:54.613 に答える
0

これは、ファイル 2 で要素をコロンに正しく配置する方法です。おそらく最もきれいなものではありませんが、アイデアは得られます。

 str2 = open(file2).read()
 righttocolon = [s.split(":")[1] for s in [ln for ln in str2.split("\n")] if len(s.split(":")) == 2]
于 2012-08-25T03:00:38.607 に答える