Я хочу прочитать файл WAV (который находится на моем FTP-сервере) напрямую с FTP-сервера, не загружая его на мой компьютер в Python. Возможно ли это, и если да, то как?
Я попробовал это решение. Чтение файла в буфере из 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
из:
Получите имена файлов внутри zip файла на FTP-сервере, не скачивая весь архив
ftp = FTP(...)
fin = FtpFile(ftp, "C3.WAV")
# The rest of the code is the same
Код немного неэффективен, так как каждый fin.read
открывает новое соединение для загрузки данных.
Для более эффективной реализации просто загрузите весь заголовок сразу (я не знаю структуру заголовка WAV, я загружаю 10 КБ здесь в качестве примера):
from io import BytesIO
ftp = FTP(...)
fin = BytesIO(FtpFile(ftp, "C3.WAV").read(10240))
# The rest of the code is the same