我正在尝试找到一种有效的方法来比较多个文本文件中的内容并找到其中的重复行。
我首先从嵌套循环开始,它起作用了。
def process_files(self,directory):
files=os.listdir(directory)
files=[os.path.join(directory, file) for file in files]
for i in range(len(files)):
file1=files[i]
fh1=open(file1, 'r')
file1_raw = fh1.read()
if i+1 <len(files):
for i in range(len(files[1:])):
file2=files[i+1]
fh2=open(file2, 'r')
file2_raw = fh2.read()
file1_words = file1_raw.split()
file2_words = file2_raw.split()
for w in file2_words:
if w in file1_words:
print (w)
然后,我发现它非常慢,因为文件很大。因此,我尝试使用泳池工作人员并找到解决方法。我试图实现这里提到的想法。但是,我无法让它正常工作。
我有一个要求:我不想将文件与自身进行比较。这应该在zip中考虑。
如果有人能在这件事上给出一些想法,将不胜感激。谢谢。
一些使用 bash comm
、sort
和 awk
的解决方案,这些解决方案会将file2
的唯一值重定向到out
comm <(sort f1) <(sort f2) -13 > out
如果要提高速度,请使用sort
--parallel
选项。
使用awk
awk 'NR==FNR{lines[$0];next} !($0 in lines)' f1 f2 > out
文件 1 :
I'm unique and I leave if file 1
1
2
3
4
5
I'm unique and I leave if file 1
6
I'm unique and I leave if file 1
7
I'm unique and I leave if file 1
文件 2 :
1
2
I'm unique and I leave if file 2
3
4
5
I'm unique and I leave if file 2
6
7
外
I'm unique and I leave if file 2
I'm unique and I leave if file 2
通过重复行,如果您的意思是行与行完全匹配,则考虑将整行作为字符串插入的数据库,并检查数据库中是否存在该行。你可以尝试像MongoDB或redis这样的数据库