Python 2.7 将字符串元素(字符)写入二进制文件
Python 2.7 writing strings elements (character) to a binary file
我正在使用 Python 2.7 访问一个 API 那个 returns JSON 有一个键 ="ringtone_file" 和一个相关的值是一个为通过 HTTP 传输而编码的 mp3 文件。我创建了一个伪造的 mp3 文件,由 256 个字节组成,从 0x00 到 0xff,返回的文件如下所示。
{"ringtone_file":"\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"}
我访问 API 使用以下代码减去异常处理代码
import requests
response = requests.get(url)
dict = response.json()
print dict
这会产生以下输出
{u'ringtone_file': u'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'}
我想做的是以二进制格式将此字符串的每个字符或十六进制值写入一个文件。我希望结果是一个大小为 256 字节的文件,其中文件中的第一个字节的值为 0,最后一个字节的值为 255。我无法更改 API。有人可以建议使用 Python 2.7.
实现此目的的合理方法吗
我尝试做对我来说显而易见的事情,即打开一个文件以二进制模式写入,然后将 unicode 字符串写入该文件。来自编解码器的错误消息表明我无法写入 128 和 255 之间的值(包括 128 和 255)。
由于字符串值为 Unicode,您必须对字符串进行编码才能将其写入文件。 latin1
编解码器直接映射到前 256 个 Unicode 字符,因此在字符串上使用 .encode('latin1')
。
示例:
>>> s=u'\x00\x01\x02\xfd\xfe\xff'
>>> s
u'\x00\x01\x02\xfd\xfe\xff' # Unicode string
>>> s.encode('latin1')
'\x00\x01\x02\xfd\xfe\xff' # Now a byte string.
我正在使用 Python 2.7 访问一个 API 那个 returns JSON 有一个键 ="ringtone_file" 和一个相关的值是一个为通过 HTTP 传输而编码的 mp3 文件。我创建了一个伪造的 mp3 文件,由 256 个字节组成,从 0x00 到 0xff,返回的文件如下所示。
{"ringtone_file":"\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"}
我访问 API 使用以下代码减去异常处理代码
import requests
response = requests.get(url)
dict = response.json()
print dict
这会产生以下输出
{u'ringtone_file': u'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'}
我想做的是以二进制格式将此字符串的每个字符或十六进制值写入一个文件。我希望结果是一个大小为 256 字节的文件,其中文件中的第一个字节的值为 0,最后一个字节的值为 255。我无法更改 API。有人可以建议使用 Python 2.7.
实现此目的的合理方法吗我尝试做对我来说显而易见的事情,即打开一个文件以二进制模式写入,然后将 unicode 字符串写入该文件。来自编解码器的错误消息表明我无法写入 128 和 255 之间的值(包括 128 和 255)。
由于字符串值为 Unicode,您必须对字符串进行编码才能将其写入文件。 latin1
编解码器直接映射到前 256 个 Unicode 字符,因此在字符串上使用 .encode('latin1')
。
示例:
>>> s=u'\x00\x01\x02\xfd\xfe\xff'
>>> s
u'\x00\x01\x02\xfd\xfe\xff' # Unicode string
>>> s.encode('latin1')
'\x00\x01\x02\xfd\xfe\xff' # Now a byte string.