Я пытаюсь загрузить файл hdf5 с http-сервера. Я могу сделать это с помощью Python подпроцесс модуля и wget, но я чувствую, что я обманывалЧто такое pythonic способ загрузки файлов hdf5 с http-сервера?
# wget solution
import subprocess
url = 'http://url/to/file.h5'
subprocess(['wget', '--proxy=off', url])
Я могу также использовать URLLIB и запрос модулей для загрузки изображений, как это:
# requests solution
url2 = 'http://url/to/image.png'
r = requests.get(url2)
with open('image.png', 'wb') as img:
img.write(r.content)
# urllib solution
urllib.urlretrieve(url2, 'outfile.png')
Однако, когда Я пытаюсь загрузить hdf5-файл с помощью этого метода и запустить команду оболочки «файл» я получаю:
>file test.h5
>test.h5: HTML document, ASCII text, with very long lines
Вот заголовок из requests.get() (не уверен, если это поможет)
{'accept-ranges': 'bytes',
'content-length': '413399',
'date': 'Tue, 19 Feb 2013 08:51:06 GMT',
'etag': 'W/"413399-1361177055000"',
'last-modified': 'Mon, 18 Feb 2013 08:44:15 GMT',
'server': 'Apache-Coyote/1.1'}
Должен ли я использовать подпроцесс wget throug или есть ли решение pythonic?
Решение: Проблема была вызвана тем, что я не отключить прокси-сервер, прежде чем я пытался загрузить файл и из-за того, что перевод был перехвачен. Этот кусок кода сделал трюк.
import urllib2
proxy_handler = urllib2.ProxyHandler({})
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
url = 'http://url/to/file.h5'
req = urllib2.Request(url)
r = opener.open(req)
result = r.read()
with open('my_file.h5', 'wb') as f:
f.write(result)
С urllib вы действительно посмотрели файл? Это похоже на то, что запрос перехватывается, и вы загружаете html-документ вместо требуемого png. Может быть, вы можете найти лучшую ссылку? – Oin
Вы верны, запрос был перехвачен! Когда я отключил прокси-сервер и сделал некоторые другие вещи, я, наконец, получил нужный файл. Это был мой первый пост для SO. Можно ли включить мое полное решение в исходный вопрос? Должен ли я каким-то образом изменить название вопроса? – LordBullingdon
Да, вы можете просто изменить свой вопрос, а затем опубликовать свой ответ. – Oin