1

我正在处理二进制文件。它们是 jpeg 图像。我需要用 Python 编辑它们并保存它们。我一直在使用这个脚本,到目前为止似乎工作正常:

import os, sys

newpath= r'C:/Users/Umberto/Desktop/temporary'
if not os.path.exists (newpath):
    os.makedirs (newpath)

data= open ('C:/Users/Umberto/Desktop/Prove_Script/Varie/_BR_Browse.001_2065642654_1.BINARY', 'rb+')
edit_data= str (data.read () )
out= open (newpath+ '/preview.BINARY', 'w')

# do my edits in a secon time...

out.write (edit_data)
data.close ()
out.close ()

无论如何,出现了一个问题(在 Python 之外):我的两个文件应该是相同的,但事实并非如此!通过在十六进制编辑器中打开它们,它们看起来略有不同(原来的大小比新的小,即 163 KB,而 167)。此外,当我打开它们时,它们是不同的。它们仍然被视为图像,但一个看起来很好(原始),而另一个则完全是一团糟......出了什么问题?我正在使用的代码是否改变了我不知道的东西,如果是,是什么?我希望你能帮助我。

4

2 回答 2

2

你不说你在做什么

# do my edits in a secon time...

但除此之外,这条线

edit_data= str (data.read () )

将彻底改变您的数据。您正在打开一个二进制文件,将内容转换为字符串,然后将内容保存到另一个文件,这改变一些事情。

edit_data = data.read()

更改为上述将修复您提供的代码段,但如果您在其他地方编辑数据,这也会改变事情。

建议

如果您要大量编辑二进制文件,使用with语法可能是个好主意

with open(my_file, 'rb+') as fo:
    edit_data = fo.read()

然后您不必担心关闭文件等。一旦你有了edit_data,这将是一个字节数组,你可以在再次保存数据之前就地编辑它。

with open(my_out_file, 'wb') as fo:
    fo.write(edit_data)

更清洁,更简单!

于 2013-03-05T11:26:11.787 回答
2

使用二进制模式:

open (newpath+ '/preview.BINARY', 'wb')
于 2013-03-05T11:27:20.353 回答