Python filecmp returns false 在二进制文件上
Python filecmp returns false on binary equal files
我有一个 zip 文件和一个目录。如果 zip 文件中包含的文件不存在于目录中或它们不同(不是二进制相等),则应将它们复制到目录中。于是就有了下面两种情况
- zip 文件不包含在目录中
- 该目录已包含一个与目录中的文件同名的文件
在第一种情况下,我只是将文件直接解压缩到目录中(没有故意保留 zip 的目录结构)。
在第二种情况下,我将文件从 zip 解压到一个临时目录,并将它们与以下代码进行比较
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(如预期)。此时文件比较应该 return 为真(至少根据我的理解)但是由于某种原因 print(...)
的结果总是给我 False
.
有人知道我在这里做错了什么还是我对情况有错误的理解?
问题是此时输出文件可能未关闭(因此可能不完整 flushed/written),因为您正在 内执行 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))
我有一个 zip 文件和一个目录。如果 zip 文件中包含的文件不存在于目录中或它们不同(不是二进制相等),则应将它们复制到目录中。于是就有了下面两种情况
- zip 文件不包含在目录中
- 该目录已包含一个与目录中的文件同名的文件
在第一种情况下,我只是将文件直接解压缩到目录中(没有故意保留 zip 的目录结构)。
在第二种情况下,我将文件从 zip 解压到一个临时目录,并将它们与以下代码进行比较
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(如预期)。此时文件比较应该 return 为真(至少根据我的理解)但是由于某种原因 print(...)
的结果总是给我 False
.
有人知道我在这里做错了什么还是我对情况有错误的理解?
问题是此时输出文件可能未关闭(因此可能不完整 flushed/written),因为您正在 内执行 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))