昨天根据海报的出色建议,我开始使用该shutil.copyfileobj
方法制作文件副本。
我的程序应该制作文件的精确副本,删除最后一个字节并保存新副本。
昨晚我用一些非常小的 ASCII 文本文件对其进行了测试,因此我可以检查它是否也按照我的要求进行了测试,今天早上我在一些实际的“复杂”文件、PDF 和 JPG 上进行了尝试,它看起来像副本功能不是制作真正的副本。我在十六进制编辑器中查看了生成的文件,我可以看到在 ~ 偏移量 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)
我还可以看到新创建的对象比源文件小得多。