如何直接从 FTP 读取 WAV 文件的 header 而无需下载 Python 中的整个文件?

How to read the header of WAV file from FTP directly without downloading whole file in Python?

我想直接从 FTP 服务器读取 WAV 文件(在我的 FTP 服务器中),而不是将其下载到我在 Python 的 PC 中。有可能吗?如果有的话怎么办?

我试过这个解决方案 Read a file in buffer from ftp python 但它没有用。我有 .wav 音频文件。我想读取文件并从该 .wav 文件中获取详细信息,例如文件大小、字节率等。

我能够在本地读取 WAV 文件的代码:

import struct

from ftplib import FTP

global ftp
ftp = FTP('****', user='user-****', passwd='********')

fin = open("C3.WAV", "rb") 
chunkID = fin.read(4) 
print("ChunkID=", chunkID)

chunkSizeString = fin.read(4) # Total Size of File in Bytes - 8 Bytes
chunkSize = struct.unpack('I', chunkSizeString) # 'I' Format is to to treat the 4 bytes as unsigned 32-bit inter
totalSize = chunkSize[0]+8 # The subscript is used because struct unpack returns everything as tuple
print("TotalSize=", totalSize)

为了快速实施,您可以使用我的 FtpFile class 来自:

ftp = FTP(...)
fin = FtpFile(ftp, "C3.WAV")
# The rest of the code is the same

虽然代码效率有点低,因为每个 fin.read 都会打开一个新的下载数据连接。


为了更高效的实现,一次下载整个header(我不知道WAV header结构,我这里以下载10KB为例):

from io import BytesIO

ftp = FTP(...)
fin = BytesIO(FtpFile(ftp, "C3.WAV").read(10240))
# The rest of the code is the same