2017-01-17 11 views
0

Там же ежедневно обновляемый почтовый файл примерно (~ 600 Мб), найти на FTP-сайте, я создал скрипт, который делает следующее:FTP загрузка файлы внутри архива с помощью питона

  • Подключения к данным ftp site
  • Скачайте zip-файл (600 МБ)
  • Извлеките его в локальную папку, чтобы найти один или два текстовых файла внутри этого zip-файла моего интереса.

Мой вопрос: нужно ли ежедневно скачивать размер ZIP-архива 600MB, чтобы получить этот .txt-файл (ы), я хочу попробовать сэкономить время и деньги. Может быть, библиотека может отображать содержимое zip-файла, а затем загружать только те текстовые файлы, которые меня интересуют?

ответ

0

Я сомневаюсь, что есть общедоступная библиотека, которая уже делает это за вас. Кроме того, вопросы, требующие рекомендации для библиотеки программного обеспечения, не относятся к теме. Поэтому я вместо этого опишу способ, которым вы могли бы реализовать такую ​​функцию самостоятельно:

FTP на самом деле не имеет случайного доступа. Наиболее вероятно, что вы могли бы определить размер файла, используя команду SIZE (если поддерживается), установите смещение в конце файла с помощью команды REST, а затем прочитайте до конца файла с помощью RETR. В конце данных есть центральный каталог, который содержит центральный заголовок каталога для каждого файла, который затем содержит смещение, где расположен каждый локальный заголовок файла, и размер сжатых данных. Как только вы узнаете, какие файлы являются новыми, и где они начинаются, вы можете установить это смещение с помощью REST и использовать RETR для запуска загрузки. Поскольку FTP не имеет команды для чтения только определенного количества байтов из файла, вы должны использовать ABOR, чтобы остановить загрузку после получения достаточного количества данных. Затем вы можете извлечь сжатые данные из этой загрузки и распаковать ее, чтобы получить нужный файл. Для получения дополнительной информации см. ZIP file format - Structure.