写入文件夹时文件更改

时间:2013-03-05 11:17:26

标签: python binary jpeg hex-editors

我正在处理二进制文件。他们是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)。 而且,当我打开它们时,它们是不同的。它们仍被视为图像,但一个看起来很好(原始)而另一个看起来很混乱...... 什么地方出了错?我使用的代码是否改变了我不知道的东西,如果是的话,那是什么? 我希望你能帮助我。

2 个答案:

答案 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')