我正在处理二进制文件。他们是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,agaist 167)。 而且,当我打开它们时,它们是不同的。它们仍被视为图像,但一个看起来很好(原始)而另一个看起来很混乱...... 什么地方出了错?我使用的代码是否改变了我不知道的东西,如果是的话,那是什么? 我希望你能帮助我。
答案 0 :(得分: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)
更清洁,更简单!
答案 1 :(得分:2)
使用二进制模式:
open (newpath+ '/preview.BINARY', 'wb')