Получить размер файла из значения "Content-Length" из файла в Python 3.2
Я хочу получить Content-Length
значение из мета-переменной. Мне нужно получить размер файла, который я хочу скачать. Но последняя строка возвращает ошибку, HTTPMessage
объект не имеет атрибута getheaders
,
import urllib.request
import http.client
#----HTTP HANDLING PART----
url = "http://client.akamai.com/install/test-objects/10MB.bin"
file_name = url.split('/')[-1]
d = urllib.request.urlopen(url)
f = open(file_name, 'wb')
#----GET FILE SIZE----
meta = d.info()
print ("Download Details", meta)
file_size = int(meta.getheaders("Content-Length")[0])
6 ответов
Решение
Похоже, вы используете Python 3 и прочитали некоторый код / документацию для Python 2.x. Это плохо документировано, но нет getheaders
метод в Python 3, но только get_all
метод.
Смотрите этот отчет об ошибке.
За Content-Length
:
file_size = int(d.getheader('Content-Length'))
Измените последнюю строку на:
file_size = int(meta.get_all("Content-Length")[0])
Вы должны рассмотреть возможность использования Requests
:
import requests
url = "http://client.akamai.com/install/test-objects/10MB.bin"
resp = requests.get(url)
print resp.headers['content-length']
# '10485760'
Для Python 3 используйте:
print(resp.headers['content-length'])
вместо.
response.headers['Content-Length']
работает как на Python 2, так и на 3:
#!/usr/bin/env python
from contextlib import closing
try:
from urllib2 import urlopen
except ImportError: # Python 3
from urllib.request import urlopen
with closing(urlopen('http://stackru.com/q/12996274')) as response:
print("File size: " + response.headers['Content-Length'])
import urllib.request
link = "<url here>"
f = urllib.request.urlopen(link)
meta = f.info()
print (meta.get("Content-length"))
f.close()
Работает с Python 3.x