我在 python3 中有一个字节字符串数组(它是一个音频块)。我想从中生成一个大字节串。简单的实现有点慢。怎样才能做得更好呢?
chunks = []
while not audio.ends():
chunks.append( bytes(audio.next_buffer()) )
do_some_chunk_processing()
all_audio=b''
for ch in chunks:
all_audio += ch
Run Code Online (Sandbox Code Playgroud)
怎样才能做得更快呢?
使用bytearray()
from time import time
c = b'\x02\x03\x05\x07' * 500 # test data
# Method-1 with bytes-string
bytes_string = b''
st = time()
for _ in range(10**4):
bytes_string += c
print("string concat -> took {} sec".format(time()-st))
# Method-2 with bytes-array
bytes_arr = bytearray()
st = time()
for _ in range(10**4):
bytes_arr.extend(c)
# convert byte_arr to bytes_string via
bytes_string = bytes(bytes_arr)
print("bytearray extend/concat -> took {} sec".format(time()-st))
Run Code Online (Sandbox Code Playgroud)
我的 Win10|Corei7-7th Gen 中的基准测试显示:
string concat -> took 67.27699875831604 sec
bytearray extend/concat -> took 0.08975911140441895 sec
Run Code Online (Sandbox Code Playgroud)
该代码非常不言自明。而不是使用string+=next_block,使用bytearray.extend(next_block)。构建后,bytearray您可以使用bytes(bytearray)来获取字节字符串。
| 归档时间: |
|
| 查看次数: |
6433 次 |
| 最近记录: |