gpt4 book ai didi

Python - shutil 似乎没有制作文件的真正二进制副本

转载 作者:太空宇宙 更新时间:2023-11-04 08:17:59 27 4
gpt4 key购买 nike

昨天,根据一位海报的出色建议,我开始使用 shutil.copyfileobj 方法制作文件副本。

我的程序应该制作文件的精确副本,删除最后一个字节并保存新副本。

我昨晚用一些非常小的 ASCII 文本文件对其进行了测试,这样我就可以检查它是否也在按照我的要求进行操作,今天早上我已经在一些实际的“复杂”文件、一个 PDF 和一个 JPG 上进行了测试,它看起来就像复制功能没有制作真正的副本一样。我在十六进制编辑器中查看了生成的文件,我可以看到在 ~ offset 0x300 之后发生了一些奇怪的事情——要么正在添加数据,要么正在复制时更改数据。我不知道是哪个。

我的程序迭代地删除一个字节并保存一个新版本,我可以看到新创建的文件始终与原始文件不同,(最后一个字节除外)

def doNibbleAndSave(srcfile,fileStripped,strippedExt,newpath):
counter = '%(interationCounter)03d' % {"interationCounter":interationCounter} #creates the filename counter lable
destfile = newpath + "\\" + fileStripped + "_" + counter + strippedExt #creates the new filename
with open(srcfile, 'r') as fsrc:
with open(destfile, 'w+') as fdest:
shutil.copyfileobj(fsrc, fdest)
fdest.seek(nibbleSize, os.SEEK_END) #sets the number of bytes to be removed
fdest.truncate()
srcfile = destfile #makes the iterator pick up the newly 'nibbled' file to work on next
return (srcfile)

我还可以看到新创建的对象明显小于源文件。

最佳答案

正如您已经注意到的,您应该以二进制模式打开文件; 打开(srcfile,“rb”)打开(destfile,“wb+”)。否则,Python 将假定这些文件是文本文件,并且可能会根据平台进行换行符转换(有关详细信息,请参阅 the tutorial)。

关于Python - shutil 似乎没有制作文件的真正二进制副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10627099/

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