我有一个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(正如预期的那样)。此时文件比较应该返回true(至少根据我的理解)但由于某种原因print(...)
的结果总是给我False
。
有人知道我在这里做错了什么,或者我对这种情况有误解?
答案 0 :(得分: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))