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

How to slice off a certain number of bytes from a string in Python?

我正在尝试将特定字节数的字符串写入文件。在 C 中,这将是微不足道的:因为每个字符都是 1 个字节,所以我会简单地写出我想要的字符串中的任意多个字符。

然而,在 Python 中,显然每个 character/string 都是一个对象,它们的大小各不相同,我一直无法找到如何在字节级特异性上对字符串进行切片.

我尝试过的事情:

字节数组: (对于 $,请阅读 >>>,这会弄乱格式。)

$ barray = bytearray('a')
$ import sys
$ sys.getsizeof(barray[0])
24

因此,将字符转换为字节数组并没有像我预期的那样将其转换为字节数组,而且我不清楚如何隔离各个字节。

按照描述对字节对象进行切片here

$ value = b'a'
$ sys.getsizeof(value[:1])
34 

同样,34 的大小显然不是 1 个字节。

内存视图:

$ value = b'a'  
$ mv = memoryview(value)  
$ sys.getsizeof(mv[0])  
34  
$ sys.getsizeof(mv[0][0])  
34  

顺序():

$ 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 一样的任何内容;每次都必须相同。

确保字符串被编码为字节数组(这是 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