如何从 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
我正在尝试将特定字节数的字符串写入文件。在 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