aMa*_*aMa 8 python binary file fwrite
我有一个ASCII字符串="abcdefghijk".我想用python将它写成二进制格式的二进制文件.
我试过以下:
str = "abcdefghijk"
fp = file("test.bin", "wb")
hexStr = "".join( (("\\x%s") % (x.encode("hex"))) for x in str)
fp.write(hexStr)
fp.close()
Run Code Online (Sandbox Code Playgroud)
但是,当我打开test.bin时,我看到以ascii格式而不是二进制格式.
\x61\x62\x63\x64\x65\x66\x67
Run Code Online (Sandbox Code Playgroud)
我理解它是因为这里有两个斜杠("\\ x%s").我该如何解决这个问题?提前致谢.
更新:
以下给出了预期的结果:
file = open("test.bin", "wb")
file.write("\x61\x62\x63\x64\x65\x66\x67")
file.close()
Run Code Online (Sandbox Code Playgroud)
但是如何使用"abcdef"ASCII字符串实现此目的.?
Mar*_*ers 13
你误解了\xhhPython字符串中的内容.\x在Python字符串中使用表示法只是生成某些代码点的语法.
你可以'\x61'用来制作一个字符串,或者你可以使用'a'; 两种方式只是两种说法给我一个字符串,其中包含十六进制值为61的字符,例如aASCII字符:
>>> '\x61'
'a'
>>> 'a'
'a'
>>> 'a' == '\x61'
True
Run Code Online (Sandbox Code Playgroud)
在\xhh随后的语法,是不是值 ; 最终结果中没有\,没有x,没有6和1性格.
你应该写你的字符串:
somestring = 'abcd'
with open("test.bin", "wb") as file:
file.write(somestring)
Run Code Online (Sandbox Code Playgroud)
二进制文件没什么神奇之处; 与文本模式下打开的文件的唯一区别是二进制文件不会自动将\n换行符转换为您平台的行分隔符标准; 例如,在Windows上的写作\n产生\r\n代替.
您当然不必生成十六进制转义来写二进制数据.
在Python 3上,字符串是Unicode数据,不能在没有编码的情况下写入文件,但在Python上,str类型已经是编码字节.所以在Python 3上你会使用:
somestring = 'abcd'
with open("test.bin", "wb") as file:
file.write(somestring.encode('ascii'))
Run Code Online (Sandbox Code Playgroud)
或者你使用字节串文字; b'abcd'.