Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
直接从字符串写入Python二进制文件_Python_Python 3.x_File_Png - Fatal编程技术网

直接从字符串写入Python二进制文件

直接从字符串写入Python二进制文件,python,python-3.x,file,png,Python,Python 3.x,File,Png,我有一个字符串变量中的png文件的字节码。在python不尝试编码的情况下,如何将其写入.png文件?该字符串的字符串是“\X89巴巴巴尼\r\\\\\\\\\\\\\\\\XX8\\XX8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴尼\ \ \ \\\\\\\\\\\\\\\\\\\\\\\\\\

我有一个字符串变量中的png文件的字节码。在python不尝试编码的情况下,如何将其写入.png文件?该字符串的字符串是“\X89巴巴巴尼\r\\\\\\\\\\\\\\\\XX8\\XX8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴巴尼\ \ \ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\XXXXXXXX\ x00\x00\x00DIDAT\x18Wc\xf8\xff\xff\xff\xaf\xfd\x07\xdf[:\xbc\x95Q\x81\xfb\xc7\xaa\xb5@q\x00I\xcb\xc1\x11D\x11H\xfa\xdb\x94\x19hr\x10\xf4NY\x1b$\x8d\x0c\x90\x95~\xad\xacE\x97F\x03\x94H\xff\x0f\x00\x1f]\xa2\x03U | Z\xa3\x00\x00\x00\x00\x00\x00IEND\x02


编辑:我觉得你可能需要更多关于我的情况的信息:我正在尝试制作一个小的加密程序,虽然它对字符串有效,但我也希望它对任何文件都有效,加密和解密后,我得到了一个内容完全相同的字符串,但无法将其放回文件。

您可以尝试使用PyPNG,看起来是一个可行的解决方案:

这将允许您在python中向文件写入二进制文件

with open('filename', 'wb') as f:
      f.write(bytecode) 

对于python3,必须以二进制写入模式打开文件,并将字符串编码为字节:

with open('filename', 'wb') as f:
    f.write(the_string.encode())

以二进制模式打开文件(使用“wb”而不是“w”)为什么不使用
bytes
对象,而不是
str
,后者在Python 3中是unicode代码点序列。换句话说,您是如何创建这个
str
?@johnlaroy几乎可以肯定,OP需要一个由字符串表示的bytes对象。即,由pre-pendi创建的bytes对象用a
b
转换字符串文字谢谢John,不幸的是我已经尝试过了,但是没有效果。juanpa,我需要做一些事情,比如查找字符串的一部分等等,其中一些只能在字符串上进行。你知道有什么方法可以将字符串转换回它以前的类型吗?这不起作用。
f.write
需要一个
字节JET,但是OP有一个
str
是的,我忘了输入encode,我是否应该删除这个答案,因为它本质上与上面的相同?@J.Clark我认为这两个答案都不是OP想要的。OP想要将字符串表示的字节写入文件。如果你
encode
它,它将更改字节。下面的问题是依我看,这就是为什么这是一个
str
对象而不是
bytes
对象?@J.Clark,如果你愿意的话。谢谢你的尝试,但编码正是OP想要避免的。我想他指的是不用python将字节(ascii)转换为utf字符,或者转义反斜杠。你觉得
。encode()
是吗?换句话说,您在这里所做的基本上等同于在文本模式下打开并直接编写
str
。我曾尝试在wb和rb模式下打开它,但这迫使我将其转换。我从文件的上方读取字符串,作为bytearray,但我需要仅使用字符串对其执行操作,但是那么,有没有办法将该字符串恢复为以前的类型?@JeanDuPlessis将其恢复为字节数组?