0

我有两个文件,我想在屏幕上显示文件 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

您可能在其中一个文件中有更多的空格,而不仅仅是换行符。您可以遍历F1_Contentand ,用orF2_Content打印该行的表示,以便更容易发现这些行的不同之处。print(repr(line))print(line.encode('unicode_escape'))

我会完全剥离线条。此外,将 aset用于一个文件的行,测试效率会更高

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)

直接循环文件本身逐行读取文件,让您无需将整个文件读入内存即可处理文件行。

还要注意这里使用的with语句;文件对象是上下文管理器,当上下文关闭(with块结束)时,文件对象会自动为您关闭。

使用片假名,您的一个文件也有可能对 ZI 字符使用分解,而另一个文件不使用;您可以将其表示为\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 回答