hi i đã sử dụng đoạn mã này để tải xuống tệp từ một trang web, cho đến nay các tệp nhỏ hơn 1GB đều tốt. nhưng tôi nhận thấy một file 1.5GB là không đầy đủyêu cầu response.iter_content() nhận tệp không đầy đủ (1024MB thay vì 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
sử dụng mới nhất các yêu cầu 2.2.1 python 2.6.6, centos 6.4 tập tin tải về luôn dừng lại ở 66,7% 1024MB, những gì tôi bị mất? đầu ra:
file total size : 1581244542
...67%, 1024 MB, 5687 KB/s, 184 seconds passed
có vẻ như các máy phát điện được trả về bởi iter_content() cho rằng tất cả các khối được lấy ra và không có lỗi. btw phần ngoại lệ không chạy, bởi vì máy chủ đã trả về độ dài nội dung trong tiêu đề phản hồi.
Note "b" = bit, trong khi "B" = byte (có lẽ là ý của bạn) –
@Jonathon ok ... orz, tôi đã cập nhật bài đăng – Shuman
's' trong' s.get (...) 'là gì? –