Как я могу получить дату создания файла в Интернете (с Python)? - PullRequest
1 голос
/ 09 января 2009

У меня есть приложение на python, которое использует файл, загруженный клиентом с веб-сайта.

Веб-сайт не находится под моим контролем и не имеет API для проверки «последней версии» файла.

Есть ли простой способ получить доступ к файлу (в python) через URL и проверить его дату (или размер) без необходимости каждый раз загружать его на клиентский компьютер?

обновление: Спасибо тем, кто упомянул дату «последнего изменения». Это правильный параметр для просмотра.

Полагаю, я недостаточно хорошо сформулировал вопрос. Как мне сделать это из сценария Python? Я хочу, чтобы приложение проверило файл и затем загрузило его, если (дата последнего изменения <дата текущего файла). </p>

Ответы [ 6 ]

5 голосов
/ 10 января 2009

Учтите, что «последний измененный» может отсутствовать:

>>> from urllib import urlopen
>>> f=urlopen('http://google.com/')
>>> i=f.info()
>>> i.keys()
['set-cookie', 'expires', 'server', 'connection', 'cache-control', 'date', 'content-type']
>>> i.getdate('date')
(2009, 1, 10, 16, 17, 8, 0, 1, 0)
>>> i.getheader('date')
'Sat, 10 Jan 2009 16:17:08 GMT'
>>> i.getdate('last-modified')
>>>

Теперь вы можете сравнить:

if (i.getdate('last-modified') or i.getheader('date')) > current_file_date:
  open('file', 'w').write(f.read())
5 голосов
/ 09 января 2009

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

4 голосов
/ 09 января 2009

Проверьте заголовок Last-Modified .

РЕДАКТИРОВАТЬ: Попробуйте urllib2 .

РЕДАКТИРОВАТЬ 2: Этот краткий учебник должен дать вам довольно хорошее чувство для достижения вашей цели.

2 голосов
/ 09 января 2009

В HTTP 1.1 поле заголовка Content-Disposition предназначено для хранения такого рода информации в параметре creation-date (см. RFC 2183 ).

1 голос
/ 01 октября 2018

Может быть, обновленный ответ здесь на вопрос ... Я обнаружил, что этот код работает для файла Excel, например. Я уверен, что это будет зависеть от того, что сервер решит сделать доступным.

from urllib.request import urlopen
URL = 'url'
with urlopen(URL) as f:
    print(dict(f.getheaders())['Last-Modified'])
    # Remove the ['Last-Modified'] if you want to see what is in the header
0 голосов
/ 09 января 2009

Я создал инструмент, который делает это на основе etags. Очень похоже на то, что вы описываете:

pfetch - это скрученный инструмент, который делает это по расписанию и может работать со многими, многими URL-адресами и инициировать события при изменении (после загрузки). Это довольно просто, но все же может быть сложнее, чем вы хотите.

Этот код однако, это именно то, что вы просите.

Итак, сделайте свой выбор. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...