我有两个文件,我想在屏幕中显示文件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
''
''
答案 0 :(得分:2)
您可能在其中一个文件中有更多的空格而不仅仅是换行符。您可以循环F1_Content
和F2_Content
,使用print(repr(line))
或print(line.encode('unicode_escape'))
打印该行的表示,以便更轻松地发现线条不同。
我完全剥离线条。另外,对一个文件的行使用set
,测试将 更高效:
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 + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK):
>>> 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)