如何实现文件下载进度条呢?
原创
文章标签 python pycharm 下载进度条 进度条 下载文件 文章分类 Python 后端开发
©著作权归作者所有:来自51CTO博客作者CorwinPC的原创作品,请联系作者获取转载授权,否则将追究法律责任
比如有时候我们在利用python下载文件的时候,通常情况下,文件下载过程我们是感知不到的,只有等文件下载完成,我们才能知道,该文件已经下载完成,假如此时下载文件很大,下载时间就会比较漫长,如果这时候有一个下载进度条,那就太好了,在此封装一个文件下载进度条工具方法,拿来即用。
目录
2、运行展示
1、程序源码
#!/usr/bin/python# -*- coding: UTF-8 -*-"""@author: Roc-xb"""import requestsimport timedef save_file(url, filename): start = time.time() # 开始时间 size = 0 headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" } # 请求头参数 res = requests.get(url, headers=headers, stream=True) chunk_size = 1024 # 每次下载数据大小 content_size = int(res.headers["content-length"]) # 文件总字节数 if res.status_code == 200: print("[文件地址]:", url) print('[文件名称]:', filename) print('[文件大小]: {:.3f} MB'.format(content_size / chunk_size / 1024)) with open(f"{filename}", 'wb') as f: for data in res.iter_content(chunk_size=chunk_size): f.write(data) size += len(data) # 已下载文件大小 print('\r[下载进度]: {}{:.2f}%'.format('>' * int(size * 50 / content_size), float(size / content_size * 100)),end='') # 下载进度条 end = time.time() # 结束时间 print("\n[下载时间]: {:.2f}s".format(end - start)) print("".center(100, "*"))
2、运行展示
- 赞
- 收藏
- 评论
- *举报
上一篇:Jquery实现定时器实例
Original: https://blog.51cto.com/YangPC/5483091
Author: CorwinPC
Title: 如何实现文件下载进度条呢?
相关阅读1
Title: 【零基础学Python】后端开发篇第二十节--Python Web开发一:Web开发简介
(Python Web开发一:Web开发简介)
一、背景知识
当今的互联网时代,大家经常使用电脑上的浏览器或者手机 进行购物、刷新闻,娱乐,学习。这些丰富多彩应用,背后的软件系统是基于web技术开发的。这些系统,通常可以分为 : 客户端 和 服务端 。 丰富多彩的应用: 1.Web APP 2.移动APP web系统: 1.客户端(前端) 2.服务端(后端)3.全栈 下面是我们的一个简单的示意图: 举一个例子而言,手机应用(比如微信)就是 客户端, 腾讯公司的微信服务程序(运行在腾讯的机房里面)就是服务端。再比如,电脑打开淘宝, 浏览器里面运行的淘宝网页,就是 客户端, 而 阿里巴巴 的 淘宝服务程序(运行在阿里的机房里面)就是服务端。也有人喜欢把 客户端 称之为 前端 ,服务端称之为 后端 。
- 那么 开发 客户端(前端)的工程师 就会被称之为
客户端(前端)工程师
, - 开发 服务端(后端)的工程师 就会被称之为
服务端(后端)工程师
。 - 如果一个工程师,同时可以做前端和后端的开发,通常可以称之为
web系统全栈工程师
。
二、前端开发和后端开发要做什么
下面我们就 分别来看看 前端开发 和 后端开发 大体是做什么。 这里, 我们先关注 浏览器前端, 也就是web前端。 对于手机前端的 开发,暂不涉及。
1.Web 前端开发
1.1html 文件
1.2CSS
CSS 文档控制界面的显示样式和效果,比如字体、大小、前景色、背景色、间距、一些动画效果等等,一句话:就是 让你的界面更好看
1.3资源文件
包括显示在界面上的 图片、视频等
1.4javascript 脚本
html 文档里面还经常包括一些,javascript 脚本 ( 简称 js )。 js 和 python 一样是一种编程语言。 python脚本通过python解释器执行,js脚本通过浏览器内置的 js 引擎执行。 注意:html 和 css 文档 只是定义了一些静态的界面内容。前端的动态功能, 就是通过浏览器执行 这些 js脚本产生的。 以上的这些文件都需要我们的浏览器进行解释执行
1.5浏览器解释执行
上述的这些文件开发出来后, 最终都是通过 浏览器 来运行,展示出界面来给用户观看和操作的。 上述的文件(html,css,js)没法直接放到浏览器端,都是部署在后端服务器上(有些在cdn上)。 当我们浏览一个网站的时候,浏览器先通过http协议获取这些文档,然后读取解释它们的内容,生成对应的界面呈现给我们操作。 在大概十多年前,相对后端开发来说,前端的开发量相对较小。 主要就是设计界面。前端开发一般没有太多的动态的逻辑控制功能。最多就是用js 脚本做一些页面动态效果,以及一些数据校验的工作(比如注册时的用户名长度校验等)。主要的数据处理 和 业务逻辑的实现,甚至界面html 文档的动态生成,都是后端做的事情。由于 设计上的难度相对较小,前端工程师有时被称为 做界面的,略带一种轻视的意味。而现在由于 浏览器 内嵌的js 解释器性能飞速提升,可以让大量的代码逻辑在前端实现。由于前端浏览器运行在每个用户各自的电脑(或者手机)上,如果把一部分业务逻辑的实现放在前端,相当于有成千上万的前端设备分担后端的负荷, 可以大大分担后端的压力。所以现在的web系统的设计,前端的重要性日益增加。 前端工程师经常需要通过javascript语言,实现数据处理和展示。 有的系统,前端也实现部分业务逻辑功能。 比如: 用户权限检查、用户显示数据过滤等。有的架构师喜欢把大量的业务逻辑转移到前端,加上界面渲染的功能也完全由前端实现。这样 后端就做单纯的数据存储 和 分析工作。 所以现在前端工程师, 不仅设计实现 用户界面,还要能使用js 语言 实现 数据获取、分析处理 和 业务相关的逻辑。
2.Web 后端 开发
2.1静态文件服务方案
前端开发出来的HTML、css、js文件存储在什么地方,使用什么的服务提供给前端浏览器访问。通常一个比较大型的网站, 静态文件往往会使用单独的服务器专门提供服务。一部分特别消耗带宽的数据(比如视频、图片)会使用第三方的云服务厂商(比如阿里云的cdn和oss服务)。
2.2API 接口设计
就是 定义 前端和后端交互接口规范,常用:REST 目前流行的是REST API 风格的接口,但是需要我们设计具体的API请求和响应消息的具体内容。 这个通常应该是架构师设计的, 但是往往这工作经常会落到后端工程师头上。实际上 很多公司里面,系统架构师 也会做后端开发的工作。
2.3数据库存储方案
比如:选择什么样的数据库,包括 关系型和非关系型的数据库。
2.4数据库表结构设计
要能合理、高效的存储业务数据,这样才能 高效查询、修改各种关联性的数据。为了提高性能, 需要决定使用怎样的 缓存服务 和 异步任务服务。还有 其它种种特殊的考虑,比如 要熟悉目前日益流行的云存储技术,将有的数据,如图片,视频等 合理存储在云端。有的系统还需要有 大数据分析的需求 要后端高效实现。
三、使用 Django 开发后端服务
- 开源免费的Web应用 开发框架
- 我们开发销售管理系统
- 成为一名后端开发人员
大家可以把自己想象成一个后端开发人员, 根据上面的系统需求, 一步步的实现后端系统。 而这个系统的前端开发 ,你们也假想有个团队在开发, 如果你们后端实现正确, 就可以正确 对接成功,完成一个完整系统的功能。 不要着急,下期我将会带你一一探寻~我们下期再见!
Original: https://blog.51cto.com/u_15492594/5556347
Author: 是Dream呀
Title: 【零基础学Python】后端开发篇第二十节--Python Web开发一:Web开发简介
相关阅读2
Title: python 本地音乐播放器制作过程
制作这个播放器的目的是为了将下载下来的mp3文件进行随机或是顺序的播放。选择需要播放的音乐的路径,选择播放方式,经过测试可以完美的播放本地音乐。
在开始之前介绍一个免费下载mp3音乐的网站,有需要的可以下载自己喜欢的音乐。当然有各大音乐平台会员的大佬就不需要了。
http://music.y444.cn/#/
缺少音乐素材的可以去免费下载即可,准备好音乐素材后将其放到一个文件夹下面即可。
在应用实现过程中,总共使用了下面这些库,特别需要注意的是这个库playsound使用的版本是1.3.0,听说其他版本在播放音乐时可能存在问题。也可以将播放音乐的部分换成其他的实现方式。
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
from QCandyUi import CandyWindow
import random, os
from playsound import playsound
最先实现的是播放音乐的业务逻辑,这里是采用pyqt5自带的QThread线程来实现的,目的是将播放音乐的部分作为一个子线程来运行,防止与UI界面的主线程产生阻塞。
实现子线程的部分是一样的范式,一般情况下按照这种范式实现,屡试不爽。在前面的UI桌面应用中几乎都是使用这种方式来实现多线程的。
class PlayThread(QThread):
finished = pyqtSignal(bool)
def __init__(self, parent=None):
super(PlayThread, self).__init__(parent)
self.parent = parent
self.working = True
def __del__(self):
self.working = False
self.wait()
def run(self):
music_files = os.listdir(self.parent.music_file_path.text())
print(music_files)
for index in range(0, len(music_files) - 1):
if self.parent.play_type_selected.currentText() == '随机播放':
index = random.randint(0, len(music_files) - 1)
print(index)
playsound(os.path.join(self.parent.music_file_path.text(), music_files[index]))
self.finished.emit(True)
音乐播放的业务逻辑实现完成了,接下来来实现UI界面的部分。应用就是简单的设计了一下不是很复杂。
pyqt5的UI界面的实现方式主要是组件的布局和槽函数的引用,下面是UI界面布局及各个槽函数的初始化及引用。以及如何界面的主线程中调用子线程的使用。
class MusicUI(QWidget):
def __init__(self):
super(MusicUI, self).__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('本地音乐播放器 公众号:[Python 集中营]')
self.setWindowIcon(QIcon('音乐.ico'))
self.setFixedWidth(500)
self.setFixedHeight(100)
hbox1 = QHBoxLayout()
self.music_file_path = QLineEdit()
self.music_file_path.setReadOnly(True)
self.music_file_btn = QPushButton()
self.music_file_btn.setText('路径')
self.music_file_btn.clicked.connect(self.music_file_btn_click)
hbox1.addWidget(self.music_file_path)
hbox1.addWidget(self.music_file_btn)
hbox2 = QHBoxLayout()
self.play_type_selected = QComboBox()
self.play_type_selected.addItem('随机播放')
self.play_type_selected.addItem('顺序播放')
self.start_btn = QPushButton()
self.start_btn.setText('开始播放')
self.start_btn.clicked.connect(self.start_btn_click)
hbox2.addWidget(self.play_type_selected)
hbox2.addWidget(self.start_btn)
vbox = QVBoxLayout()
vbox.addLayout(hbox1)
vbox.addLayout(hbox2)
self.thread_ = PlayThread(self)
self.thread_.finished.connect(self.finished)
self.setLayout(vbox)
def music_file_btn_click(self):
dir = QFileDialog.getExistingDirectory(self, "选择文件夹", os.getcwd())
self.music_file_path.setText(dir)
def start_btn_click(self):
self.start_btn.setEnabled(False)
self.thread_.start()
def finished(self,finished):
if finished is True:
self.start_btn.setEnabled(True)
最后,使用mian函数将界面布局的整个过程加入到主体循环中就大功告成了。
if __name__ == '__main__':
app = QApplication(sys.argv)
w = CandyWindow.createWindow(MusicUI(), theme='blue', title='本地音乐播放器 公众号:[Python 集中营]',
ico_path='音乐.ico')
w.show()
sys.exit(app.exec_())
完整源代码已经保存在百度网盘上面,将上述代码块全部copy到开发中运行即可,或者在公众号内回复'1002'获取下载链接直接下载.py文件到开发工具运行也是可以的。
创作不易,欢迎大家积极提问,有python相关的问题请留言,看到即回复,感谢大家一直的支持!
【往期精彩】
自动化工具:PyAutoGUI的鼠标与键盘控制,解放双手的利器!
来自程序猿的生日蛋糕你见过吗?
懒人python操作,代码中永远只需要导入一个库...
自动化办公:手机号码提取器,使用正则表达式轻松提取文本文件中的手机号码...
刚刚发现的可视化动态图库ipyvizzu,太好看了!
Original: https://www.cnblogs.com/lwsbc/p/16383567.html
Author: Python集中营
Title: python 本地音乐播放器制作过程
相关阅读3
Title: Python之数据分析(Numpy中的除法和取余、三角函数、ufunc对象的位运算)
文章目录
一、四种除法
1、真除: 结果完全保留,小数部分也保留
1)numpy.true_divide()
2)numpy.divide()
3)也可以直接用'/'除法运算符,结果也是真除结果
2、地板除: 将除法结果向下取整,往小的取整
1)numpy.floor_divide()
2)运算符号'//'
3、天花板除: 将除法结果向上取整,往大的取整
没有具体函数,可以先做真除,再天花板取整(ceil),再取int类型
4、截断除: 直接去除小数部分取整
没有具体函数,可以先做真除,再截断取整(trunc),再取int类型
5、练习代码
import numpy as npa = np.array([5, 5, -5, -5])b = np.array([2, -2, 2, -2])print(a, b)# 真除c1 = np.true_divide(a, b)c2 = np.divide(a, b)c3 = a / bprint("---------------真除---------------")print(c1, c2, c3)# 地板除d1 = np.floor_divide(a, b)d2 = a // bprint("---------------地板除----------------")print(d1, d2)# 天花板除e = np.ceil(a/b).astype(int)print("--------------天花板除-----------------")print(e)# 截断除f = np.trunc(a/b).astype(int)print("----------------截断除---------------")print(f)
二、取余运算
1、地板余数: 做地板除之后得到的余数
1)numpy.remainder()
2)numpy.mod()
3)取余运算符号'%'
2、截断余数: 做截断除之后得到的余数
numpy.fmod()
3、练习代码
import numpy as npa = np.array([5, 5, -5, -5])b = np.array([2, -2, 2, -2])print(a, b)# 地板取余c1 = np.remainder(a, b)c2 = np.mod(a, b)c3 = a % bprint("------------------地板取余-------------------")print(c1, c2, c3)# 截断取余d = np.fmod(a, b)print("------------------截断取余-------------------")print(d)
三、斐波那契数的四种求法
1、递归方式
n = 30def fibo(n): return fibo(n-1) + fibo(n-2) if n>=3 else 1print(fibo(n))
2、循环方式: 不需要占用太多内存,效率高于上一种
n = 30f1, f2 = 0, 1 # 记录相加的两项for i in range(n): # fn是从f0开始的,得到第一项是1,第二项也是1 fn = f1 + f2 # 加完之后就需要交换一下值 f1, f2 = fn, f1print(fn)
3、矩阵方式: 效果更高
import numpy as npn = 30print(int((np.mat('1. 1.; 1. 0.') ** (n-1))[0, 0]))
4、根号方式
import numpy as npn = 30r = np.sqrt(5)print(int((((1+r)/2) ** n - ((1-r)/2) ** n)/r))
四、坐标变化的三角函数
1、ufunc对象须知
python中几乎所有的算数和关系运算符都被numpy借助ufunc对象实现为可对数组操作的矢量化运算符
2、实现原理
numpy中的三角函数都是ufunc对象,可以对参数数组中的每个元素进行三角函数运算,并将运算结果以数组形式返回
横纵坐标数据都随三角函数变化的曲线(如两个方向的交流电):
x = Asin(at+pi/2)
y = Bsin(bt)
3、参考代码
import numpy as npimport matplotlib.pylab as mpt = np.linspace(0, 2*np.pi, 201) # 用201个点来记录位置信息# A, a, B, b = 10, 1, 5, 1# A, a, B, b = 10, 1, 5, 2 # 频率改成2A, a, B, b = 10, 9, 5, 7 # 频率改成非整数倍x = A * np.sin(a*t + np.pi/2)y = B * np.sin(b*t)# 绘制曲线mp.figure('Lissajous', facecolor='lightgray')mp.title('Lissajous', fontsize=20)mp.xlabel('x', fontsize=14)mp.ylabel('y', fontsize=14)mp.tick_params(labelsize=10)mp.grid(linestyle=':')mp.plot(x, y, c='orangered', label='Lissajous')mp.legend()mp.show()
五、ufunc对象位运算
1、异或运算: 只要是相同的就是0,不同的就是1。在numpy中,符号相同的是正数,符号不同的是负数。
- ^或__xor__或bitwise_xor
- 1^0=1
1^1=0
0^0=0
0^1=1
2、位与运算: 只要有0就是0,在numpy中,只要两个不同,结果就是0,凡是2的次方的结果都是0
- &或__and__或bitwise_and
- 1&0=0
0&0=0
0&1=0
1&1=1
3、移位运算: 左移相当于除2,右移相当于乘2
- 左移(除2):<
4、练习代码
Original: https://blog.51cto.com/u_15738244/5535710
Author: mb62e7593c01ba5
Title: Python之数据分析(Numpy中的除法和取余、三角函数、ufunc对象的位运算)