0

2 つのファイルがあり、ファイル 1 とファイル 2 に存在するコンテンツを画面に表示したい。しかし、何も表示されないようです (しかし、表示されるはずオレンジです)。何が問題ですか?

ありがとう

File 1

リンゴ
バナナ
オレンジ

File 2

オレンジ

これが私のコードです

import sys

File1 = open(sys.argv[1],"r",encoding="UTF-8")
F1_Content = File1.readlines()
F1_Content = map(lambda e : e.rstrip("\n"),F1_Content)

File2 = open(sys.argv[2],"r",encoding="UTF-8")
F2_Content = File2.readlines()
F2_Content = map(lambda e : e.rstrip("\n"),F2_Content)

for line in F1_Content:
    print(repr(line))
    if line in F2_Content:
        print(line)

File1.close()
File2.close()   

出力

'\ufeff
''
''
4

1 に答える 1

2

ファイルの 1 つに改行よりも多くの空白が含まれている可能性があります。と のいずれかをループしてF1_Content、その行F2_Content表現print(repr(line))をまたはprint(line.encode('unicode_escape'))で出力して、行の違いを見つけやすくすることができます。

行を完全に削除します。また、set1 つのファイルの行に a を使用すると、テストがより効率的になります。

with open(sys.argv[1], "r") as file1:
    f1_content = {line.strip() for line in file1}

with open open(sys.argv[2], "r") af file2:
    for line in file2:
        if line.strip() in file2:
            print(line)

ファイル自体を直接ループすると、ファイルが 1 行ずつ読み取られるため、ファイル全体をメモリに読み込まなくてもファイル行を処理できます。

withここでのステ​​ートメントの使用にも注意してください。ファイル オブジェクトはコンテキスト マネージャーであり、コンテキストが閉じる (withブロックが終了する) と、ファイル オブジェクトは自動的に閉じられます。

カタカナの場合、ファイルの 1 つは ZI 文字の分解を使用し、もう 1 つは使用しない可能性もあります。\u30B8 またはとして表現できます\u30B7\u3099。(SI + カタカナとひらがなの合成音マーク):

>>> print('\u30B8 != \u30B7\u3099:', '\u30B8' != '\u30B7\u3099')
ジ != ジ: True

を使用unicodedata.normalize()して、すべての行を合成形式または分解形式に正規化できます。ここでは、すべてのデータに合成フォームを使用するように強制します。

from unicodedata import normalize

with open(sys.argv[1], "r") as file1:
    f1_content = {normalize(line.strip(), 'NFKC') for line in file1}

with open open(sys.argv[2], "r") af file2:
    for line in file2:
        if normalize(line.strip(), 'NFKC') in file2:
            print(line)
于 2013-10-04T06:47:01.047 に答える