Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python filecmp在二进制相等文件上返回false_Python_Zip_File Comparison - Fatal编程技术网

Python filecmp在二进制相等文件上返回false

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

我有一个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(如预期的那样)。此时,文件比较应该返回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))
    

    由于时间限制,我一开始不能参加,后来我又忙于其他工作。所以,很抱歉我接受的太晚了。一开始因为时间限制我不能接受,后来我又忙于其他工作。所以,很抱歉我迟到了。