我正在尝试将字符串的特定字节数写入文件。在C中,这将是微不足道的:因为每个字符是1个字节,我只会从我想要的字符串中写出许多字符。
然而,在Python中,由于显然每个字符/字符串都是一个对象,它们的大小各不相同,而且我无法找到如何以字节级特异性对字符串进行切片。
我尝试过的事情:
的ByteArray:
(对于$,请阅读>>>
,这会影响格式化。)
$ barray = bytearray('a')
$ import sys
$ sys.getsizeof(barray[0])
24
因此,将字符转换为字节数并不会像我预期的那样将其转换为字节数组,而且我不清楚如何隔离单个字节。
按照here所述切片字节对象:
$ value = b'a'
$ sys.getsizeof(value[:1])
34
同样,34的大小显然不是1个字节。
memoryview:
$ value = b'a'
$ mv = memoryview(value)
$ sys.getsizeof(mv[0])
34
$ sys.getsizeof(mv[0][0])
34
ord():
$ n = ord('a')
$ sys.getsizeof(n)
24
$ sys.getsizeof(n[0])
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
sys.getsizeof(n[0])
TypeError: 'int' object has no attribute '__getitem__'
那么如何将字符串切成特定数量的字节?如果切断字符串实际上会导致个别字符被保留或与C一样,我不在乎;它每次都必须相同。
答案 0 :(得分:2)
确保将字符串编码为字节数组(这是Python 2.7中的默认行为)。
然后只切片字符串对象并将结果写入文件。
In [26]: s = '一二三四'
In [27]: len(s)
Out[27]: 12
In [28]: with open('test', 'wb') as f:
....: f.write(s[:2])
....:
In [29]: !ls -lh test
-rw-r--r-- 1 satoru wheel 2B Aug 24 08:41 test