如何从Python中的字符串中切掉一定数量的字节?

时间:2015-08-24 00:11:48

标签: string python-2.7 bytearray

我正在尝试将字符串的特定字节数写入文件。在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一样,我不在乎;它每次都必须相同。

1 个答案:

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