1

我有一个 zip 文件和一个目录。如果 zip 文件中包含的文件在目录中不存在或它们不同(不是二进制相等),则应将它们复制到目录中。所以有以下两种情况。

  1. 来自 zip 的文件不包含在目录中
  2. 该目录已经包含一个与目录中的文件同名的文件

在第一种情况下,我只是将文件直接提取到目录中(没有故意保留 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(如预期的那样)。文件比较此时应该返回 true (至少在我的理解中),但由于某种原因,结果print(...)总是给我False.

有人知道我在这里做错了什么还是我对情况有错误的理解?

4

1 回答 1

0

问题是此时输出文件可能未关闭(因此可能未完全刷新/写入),因为您正在上下文块中执行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))
于 2017-02-28T10:23:04.807 回答