Hallo ich habe dieses Code-Snippet verwendet, um Dateien von einer Website herunterzuladen, so weit Dateien kleiner als 1 GB sind alle gut. aber ich bemerkte eine 1,5 GB-Datei immer hält bei 66,7% 1024MB,Anfragen response.iter_content() ruft unvollständige Datei (1024 MB statt 1,5 GB)?
# s is requests session object
r = s.get(fileUrl, headers=headers, stream=True)
start_time = time.time()
with open(local_filename, 'wb') as f:
count = 1
block_size = 512
try:
total_size = int(r.headers.get('content-length'))
print 'file total size :',total_size
except TypeError:
print 'using dummy length !!!'
total_size = 10000000
for chunk in r.iter_content(chunk_size=block_size):
if chunk: # filter out keep-alive new chunks
duration = time.time() - start_time
progress_size = int(count * block_size)
if duration == 0:
duration = 0.1
speed = int(progress_size/(1024 * duration))
percent = int(count * block_size * 100/total_size)
sys.stdout.write("\r...%d%%, %d MB, %d KB/s, %d seconds passed" %
(percent, progress_size/(1024 * 1024), speed, duration))
f.write(chunk)
f.flush()
count += 1
mit neuesten Anfragen 2.2.1 Python 2.6.6, CentOS 6.4 der Datei-Download unvollständig ist, was bin ich dabei? die Ausgabe:
file total size : 1581244542
...67%, 1024 MB, 5687 KB/s, 184 seconds passed
es scheint, den Generator von iter_content() zurück denkt alle Stücke abgerufen werden und es gibt keine Fehler. Der Ausnahmeteil wurde nicht ausgeführt, da der Server die Inhaltslänge im Antwortheader zurückgegeben hat.
Note "b" = Bit, während "B" = Byte (was wahrscheinlich ist, was du meinst) –
@ Jonathon ok ... orz, ich aktualisierte den Beitrag – Shuman
Was ist das 's' in' s.get (...) '? –