我正在requests
下载文件,但是对于大文件,我每次都需要检查磁盘上文件的大小,因为我无法以百分比形式显示进度,并且我也想知道下载速度。我该怎么做呢?这是我的代码:
import requests
import sys
import time
import os
def downloadFile(url, directory) :
localFilename = url.split('/')[-1]
r = requests.get(url, stream=True)
start = time.clock()
f = open(directory + '/' + localFilename, 'wb')
for chunk in r.iter_content(chunk_size = 512 * 1024) :
if chunk :
f.write(chunk)
f.flush()
os.fsync(f.fileno())
f.close()
return (time.clock() - start)
def main() :
if len(sys.argv) > 1 :
url = sys.argv[1]
else :
url = raw_input("Enter the URL : ")
directory = raw_input("Where would you want to save the file ?")
time_elapsed = downloadFile(url, directory)
print "Download complete..."
print "Time Elapsed: " + time_elapsed
if __name__ == "__main__" :
main()
我认为一种方法是在for
循环中每次读取文件并根据标头计算进度百分比Content- Length
。但是对于大文件(大约500MB),这将再次成为问题。还有其他方法吗?
参见此处:Python进度栏和下载
我认为代码将是这样,它应该显示 自开始以来 的 平均速度, 以每秒字节数为单位:
import requests
import sys
import time
def downloadFile(url, directory) :
localFilename = url.split('/')[-1]
with open(directory + '/' + localFilename, 'wb') as f:
start = time.clock()
r = requests.get(url, stream=True)
total_length = r.headers.get('content-length')
dl = 0
if total_length is None: # no content length header
f.write(r.content)
else:
for chunk in r.iter_content(1024):
dl += len(chunk)
f.write(chunk)
done = int(50 * dl / total_length)
sys.stdout.write("\r[%s%s] %s bps" % ('=' * done, ' ' * (50-done), dl//(time.clock() - start)))
print ''
return (time.clock() - start)
def main() :
if len(sys.argv) > 1 :
url = sys.argv[1]
else :
url = raw_input("Enter the URL : ")
directory = raw_input("Where would you want to save the file ?")
time_elapsed = downloadFile(url, directory)
print "Download complete..."
print "Time Elapsed: " + time_elapsed
if __name__ == "__main__" :
main()
我向服务器发出POST请求以生成CSV文件,POST请求的响应是我要写入文件的CSV数据。 我永远不知道CSV文件的大小(它可以是10MB,100MB或1000MB),因此没有内容长度的头。 我已经编写了一个函数,可以下载并向服务器发出POST请求,生成CSV文件并将响应写入CSV文件。然而,我正在努力与进步吧。 如何添加进度条?
问题内容: 我正在下载软件上的文件,这就是我所得到的,它可以成功下载,并且我也可以取得进展,但是还有1件事我不知道该怎么做。测量下载速度。多谢您的协助。谢谢。这是当前的下载方法代码 问题答案: 用同样的方式测量任何东西。 返回一个a,您可以用它来衡量某件事情需要多长时间: 现在,您拥有读取X字节所需的纳秒数。算一下,就可以确定下载速率。 您很有可能正在寻找每秒字节数。跟踪已读取的字节总数,检查是否
我试图下载一个二进制文件,并将其原始名称保存在磁盘上(linux)。 有什么想法吗?
背景: 我正试图用进度回调将我的旧下载代码从Android中的AsyncTask和HttpUrlConnection迁移到使用Regetfit。但是,我注意到registfit/okhttp默认情况下不提供这样的回调。 我进行了大量搜索,找到了一些方法,包括okhttp的官方解决方案,它是由拦截器和自定义响应体完成的。然而,它们都没有真正满足我的需求。 我想要的是: 这段代码的问题是回调实际上是附
我试图下载和保存图像从网络使用python的模块。 以下是我使用的(工作)代码: 以下是使用
我需要下载一个相当大的(~200MB)文件。我在这里找到了下载和保存文件的方法。如果有一个进度条来知道下载了多少,那就太好了。我找到ProgressBar,但我不知道如何将两者结合起来。 这是我试过的代码,但不起作用。