2012-04-21 2 views
2

Я ищу, чтобы запланировать передачу файлов FTP, но для экономии полосы пропускания я хотел бы только загружать файлы, которые были изменены. Какой хороший надежный способ сделать это, который будет работать на разных хостинг-провайдерах?Python ftplib: Лучший способ проверить, был ли файл изменен?

ответ

2

Во-первых, проверка того, изменился ли локальный файл, действительно не имеет никакого отношения к FTP. Вы заявляете, что только собираетесь открыть FTP-соединение для загрузки файла, если он изменился.

На высоком уровне основной стратегией, которую вам нужно будет использовать, является отслеживание, когда ваше приложение в последний раз проверяется на наличие изменений (предыдущая временная метка выполнения) и сравнивает это с отметками времени, которые вы заинтересованы при загрузке. Если временная метка в файлах более поздняя, ​​они, скорее всего, изменились. Я говорю, скорее всего, потому, что можно обновить только временную метку (например, touch на unix/linux).

Вот краткий пример, показывающий, как проверить время изменения для всех элементов в определенном каталоге:

import os, time 

checkdir="./" 

for item in os.listdir(checkdir): 
    item_path = "%s%s"%(checkdir,item) 
    mtime = os.path.getmtime(item_path) 
    print "%s: %s" %(item_path,mtime) 

Заметим, что это не делает различий между типами файлов (например, регулярный файл, каталог, символическая ссылка). Прочтите docs on os.path, чтобы узнать, как определить тип файла, чтобы вы могли пропустить определенные типы, если вы так решите.

Вам все равно придется придумать логику, чтобы сохранить время предыдущей «проверки», чтобы вы ссылались на нее при последующих сканированиях. Очень простой способ сделать это - сохранить значение в файле.

Убедитесь, что вы используете стратегию блокировки в случае, если два «сканирования» перекрываются. Загрузка FTP займет некоторое время.

Смежные вопросы