我有个问题。我有三个声音文件,例如 a.wav、b.wav 和 c.wav。我想将它们写入单个文件,例如 all.xmv(扩展名也可能不同),当我需要时我想提取其中一个并播放它(例如我想播放 a.wav 并提取它形成 all.xmv)。
我怎么能在python中做到这一点。我听说有一个blockwrite
在 Delphi 中命名的函数,它可以做我想要的事情。python 中是否有类似于blockwrite
Delphi 的函数,或者我如何编写这些文件并播放它们?
我有个问题。我有三个声音文件,例如 a.wav、b.wav 和 c.wav。我想将它们写入单个文件,例如 all.xmv(扩展名也可能不同),当我需要时我想提取其中一个并播放它(例如我想播放 a.wav 并提取它形成 all.xmv)。
我怎么能在python中做到这一点。我听说有一个blockwrite
在 Delphi 中命名的函数,它可以做我想要的事情。python 中是否有类似于blockwrite
Delphi 的函数,或者我如何编写这些文件并播放它们?
标准 tar/zip 文件对您有用吗?
如果存档的想法(顺便说一句,您的问题的最佳答案)不适合您,您可以将来自多个文件的数据融合到一个文件中,例如通过写入连续的二进制数据块(从而创建一个未压缩的存档!)
让路径是应该连接的文件列表:
import io
import os
offsets = [] # the offsets that should be kept for later file navigation
last_offset = 0
fout = io.FileIO(out_path, 'w')
for path in paths:
f = io.FileIO(path) # stream IO
fout.write(f.read())
f.close()
last_offset += os.path.getsize(path)
offsets.append(last_offset)
fout.close()
# Pseudo: write the offsets to separate file e.g. by pickling
# ...
# reading the data, given that offsets[] list is available
file_ID = 10 # e.g. you need to read 10th file
f = io.FileIO(path)
f.seek(offsets[file_ID - 1]) # seek to required position
read_size = offsets[filed_ID] - offsets[file_ID - 1] # get the file size
data = f.read(read_size) # here we are!
f.close()