令我感到羞耻的是,我仍然不太了解字节算术和其他操作。我正在尝试从 mp3 文件中计算 ID3 标签的大小。版本 3 或 4,没有扩展标题。为简单起见,任何异常都会返回一个空列表。
from functools import reduce
def id3_size_calc(file_path):
try:
file_open = open(file_path, 'rb')
except Exception:
return print([])
with file_open:
id3_header = file_open.read(10)
if id3_header[0:3] != b'ID3':
return print([])
elif id3_header[3] != (3 or 4):
return print([])
elif id3_header[5] != 0:
return print([])
else:
size_encoded = bytearray(id3_header[-4:])
return print(reduce(lambda a, b: a * 128 + b, size_encoded, 0))
我找到了这段代码。
size = reduce(lambda a, b: a * 128 + b, size_encoded, 0)
但是,我不明白它是如何工作的。此外,我发现功能reduce已过时的信息。有没有更优雅的方法来计算这个标签的大小?