Чтение первых N строк файла на FTP-сервере в Python

У меня есть файл CSV на FTP-сервере. Размер файла около 200 МБ.

На данный момент я читаю файл, используя следующий метод. Проблема с этой реализацией заключается в том, что загрузка файла занимает слишком много времени, а выполнение метода retrbinary занимает около 12 минут. Я пробовал с разными размерами блоков, мне удалось получить время до 11 минут, что все еще слишком много.

download_file = io.BytesIO()
ftp.retrbinary("RETR {}".format(file_path),download_file.write, 8024)
download_file.seek(0)
dataframe = pandas.read_csv(download_file, nrows=4)

Мне нужна помощь в чтении файла по частям, мне нужны только первые 4 строки файла.


person Ziaf Nadeem    schedule 05.01.2021    source источник


Ответы (1)


Чтобы прочитать только первые 4 строки удаленного файла, используйте:

download_file = io.BytesIO()

ftp.sendcmd('TYPE A')
conn = ftp.transfercmd("RETR {}".format(file_path))
fp = conn.makefile('rb')
count = 0
while count < 4:
    line = fp.readline(ftp.maxline + 1)
    if not line:
        break
    download_file.write(line)
    count += 1
fp.close()
conn.close()

Если бы вы действительно хотели обработать весь файл по частям, это было бы намного сложнее, учитывая API ftplib и Pandas. Но это возможно. Для некоторых идей см. Получение имен файлов внутри zip-файла на FTP-сервере без загрузки всего архива.

person Martin Prikryl    schedule 05.01.2021