Python filecmp在二进制相等文件上返回false
我有一个zip文件和一个目录。如果zip文件中包含的文件在目录中不存在或不同(二进制不相等),则应将其复制到目录中。因此,有以下两种情况Python filecmp在二进制相等文件上返回false,python,zip,file-comparison,Python,Zip,File Comparison,我有一个zip文件和一个目录。如果zip文件中包含的文件在目录中不存在或不同(二进制不相等),则应将其复制到目录中。因此,有以下两种情况 zip中的文件不包含在目录中 该目录已包含与该目录中的文件同名的文件 在第一种情况下,我只是将文件直接解压到目录中(没有特意保留zip的目录结构) 在第二种情况下,我将文件从zip解压缩到一个临时目录,并将其与以下代码进行比较 extracted_member = os.path.join(TMP_DIR, os.path.basename(zip_membe
extracted_member = os.path.join(TMP_DIR, os.path.basename(zip_member))
with zipfile.open(zip_member) as member_file, open(extracted_member, 'wb') as target_file:
shutil.copyfileobj(member_file, target_file)
print(filecmp.cmp(extracted_member, file_from_dir, False))
因此,如果我在两次执行之间不做任何事情就运行程序两次,我将运行到案例2(如预期的那样)。此时,文件比较应该返回true(至少据我所知),但由于某种原因,print(…)
的结果总是给我False
有人知道我在这里做错了什么,或者我对情况有错误的理解吗?问题是,由于您在上下文块中执行
filecmp
操作,此时输出文件可能没有关闭(因此可能未完全刷新/写入)
在外部执行此操作,以便正确关闭文件:
with zipfile.open(zip_member) as member_file, open(extracted_member, 'wb') as target_file:
shutil.copyfileobj(member_file, target_file)
print(filecmp.cmp(extracted_member, file_from_dir, False))
问题是此时输出文件可能未关闭(因此可能未完全刷新/写入),因为您正在上下文块中执行
filecmp
操作
在外部执行此操作,以便正确关闭文件:
with zipfile.open(zip_member) as member_file, open(extracted_member, 'wb') as target_file:
shutil.copyfileobj(member_file, target_file)
print(filecmp.cmp(extracted_member, file_from_dir, False))
由于时间限制,我一开始不能参加,后来我又忙于其他工作。所以,很抱歉我接受的太晚了。一开始因为时间限制我不能接受,后来我又忙于其他工作。所以,很抱歉我迟到了。