gpt4 book ai didi

python - 如何在python中正确处理多个二进制文件?

转载 作者:行者123 更新时间:2023-12-03 14:44:55 24 4
gpt4 key购买 nike

我目前正在 PycURL 模块的帮助下开发一个多线程下载器。我正在下载部分文件并在之后合并它们。

这些部分是从多个线程单独下载的,它们以二进制模式写入临时文件,但是当我将它们合并到单个文件中时(它们以正确的顺序合并),校验和不匹配。

这只发生在 linux 环境中。相同的脚本在 Windows 环境中完美运行。

这是合并文件的代码(脚本的一部分):

with open(filename,'wb') as outfile:
print('Merging temp files ...')
for tmpfile in self.tempfile_arr:
with open(tmpfile, 'rb') as infile:
shutil.copyfileobj(infile, outfile)
print('Done!')

我试过 write()方法也是如此,但它会导致同样的问题,并且大文件会占用大量内存。

如果我手动 cat部分文件在linux中变成一个文件,然后文件的校验和匹配,问题在于python的文件合并。

编辑:
以下是我用来重现该问题的文件和校验和(sha256):
  • Original file
  • 哈希:158575ed12e705a624c3134ffe3138987c64d6a7298c5a81794ccf6866efd488
  • file merged by script
  • 哈希:c3e5a0404da480f36d37b65053732abe6d19034f60c3004a908b88d459db7d87
  • file merged manually using cat
  • 哈希:158575ed12e705a624c3134ffe3138987c64d6a7298c5a81794ccf6866efd488
  • 使用的命令:
    for i in /tmp/pycurl_*_{0..7}; do cat $i >> manually_merged.tar.gz; done
  • Part files - 在末尾编号,从 0 到 7
  • 最佳答案

    一个最小可重复的案例会很方便,但我怀疑 universal newlines成为问题:默认情况下,如果您的文件是 Windows 样式的文本(换行符是 \r\n ),它们将在阅读时被转换为 Unix 样式的换行符( \n )。然后那些 unix 样式的换行符将被写回输出文件,而不是您期望的 Windows 样式的换行符。这可以解释 python 和 cat 之间的差异。 (这不会做任何翻译)。

    尝试通过 newline='' 运行您的脚本(空字符串)到 open .

    关于python - 如何在python中正确处理多个二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59512676/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com