Python 比较多个文件中的文本并将相同的文件保留在一个位置
我在一个文件夹中有n个不同名称的文本文件,我想将文件中的文本相互比较,如果它们相同,则将它们保留在单独的文件夹中,并从主文件夹中删除。有人能帮我吗 到目前为止,我的代码是:Python 比较多个文件中的文本并将相同的文件保留在一个位置,python,duplicates,Python,Duplicates,我在一个文件夹中有n个不同名称的文本文件,我想将文件中的文本相互比较,如果它们相同,则将它们保留在单独的文件夹中,并从主文件夹中删除。有人能帮我吗 到目前为止,我的代码是: file1=open("F1.txt","r") file2=open("F2.txt","r") file3=open("F3.txt","r") file4=open("F4.txt","r") file5=open("F5.txt","r") list1=file1.readlines() list2=file2.re
file1=open("F1.txt","r")
file2=open("F2.txt","r")
file3=open("F3.txt","r")
file4=open("F4.txt","r")
file5=open("F5.txt","r")
list1=file1.readlines()
list2=file2.readlines()
list3=file3.readlines()
list4=file4.readlines()
list5=file5.readlines()
for line1 in list1:
for line2 in list2:
for line3 in list3:
for line3 in list4:
for line4 in list5:
if line1.strip() in line2.strip() in line3.strip() in line4.strip() in line5.strip():
print line1
file3.write(line1)
看
为了进行比较,可以使用filecmp模块():
因此,解决这一问题的一种方法是(一点也不优雅,但确实有效):
给出:
{'F1.txt vs F2.txt': True, 'F1.txt vs F5.txt': False, 'F2.txt vs F4.txt': True,
'F3.txt vs F4.txt': False, 'F1.txt vs F4.txt': True, 'F2.txt vs F3.txt': False,
'F2.txt vs F5.txt': False, 'F1.txt vs F3.txt': False, 'F3.txt vs F5.txt': False,
'F4.txt vs F5.txt': False}
至于问题的另一部分,您可以使用内置的shutil
和os
模块,如下所示:
import shutil
import os
if filecmp.cmp('F1.txt', 'F2.txt') is True:
shutil.move(os.path.abspath('F1.txt'), 'C:\\example\\path')
shutil.move(os.path.abspath('F2.txt'), 'C:\\example\\path')
更新:更好的答案,修改自@zalew的答案:
您应该发布您尝试过的代码,是的,这在python中是可能的。您可以计算文件的哈希值并只比较哈希值。您可能想告诉我们您在解决问题上花费了哪些精力。我尝试了以下代码file1=open(“F1.txt”,“r”)file2=open(“F2.txt”,“r”)file3=open(“F3.txt”,“r”)file4=open(“F4.txt”,“r”)file5=open(“F5.txt”,“r”)list1=file1.readlines()list2=file2.readlines()list3=file3.readlines()list4=file4.readlines()list5=file5.readlines()对于列表1中的第1行:对于列表2中的第2行:对于列表3中的第3行:对于列表4中的第3行:对于列表5中的第4行:如果line1.strip()位于line2中,则line3中的strip()位于line4中。strip()位于line5中的strip():打印line1文件3.写入(line1)上面的代码无法解决我的问题。它是否适用于多个文件,如100或200@JonYes,但您将有100或200个单独的try/except语句。。最好有一个递归for循环,我建议@zalew给出这个答案。。。然后您只需要另一行
删除重复项(c:\\example\\path')
。。。然后根据我的答案编辑上面的最后一行shutil.move(…)
文件不相同,因此我必须对类似的文件进行分组。这种情况也适用吗@不知道你说的是什么意思。。这会将文件夹中的所有文件与该文件夹中的所有其他文件进行比较,并将副本移动到指定的位置。
{'F1.txt vs F2.txt': True, 'F1.txt vs F5.txt': False, 'F2.txt vs F4.txt': True,
'F3.txt vs F4.txt': False, 'F1.txt vs F4.txt': True, 'F2.txt vs F3.txt': False,
'F2.txt vs F5.txt': False, 'F1.txt vs F3.txt': False, 'F3.txt vs F5.txt': False,
'F4.txt vs F5.txt': False}
import shutil
import os
if filecmp.cmp('F1.txt', 'F2.txt') is True:
shutil.move(os.path.abspath('F1.txt'), 'C:\\example\\path')
shutil.move(os.path.abspath('F2.txt'), 'C:\\example\\path')
import shutil
import os
import hashlib
def remove_duplicates(dir):
unique = []
for filename in os.listdir(dir):
if os.path.isfile(dir+'\\'+filename):
print('--Checking ' + dir+'\\'+filename)
filehash = hashlib.md5(filename.encode('utf8')).hexdigest()
print(filename, ' has hash: ', filehash)
if filehash not in unique:
unique.append(filehash)
else:
shutil.move(os.path.abspath(filename), 'C:\\example\\path\\destinationfolder')
return
remove_duplicates('C:\\example\\path\\sourcefolder')