Как прочитать заголовок файла WAV с FTP напрямую, не загружая весь файл на Python? - PullRequest
2 голосов
/ 15 апреля 2019

Я хочу прочитать 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)

1 Ответ

0 голосов
/ 15 апреля 2019

Для быстрой реализации вы можете использовать мой класс 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
...