Python实现带百分比的进度条
### Python 实现带百分比的进度条 #### 第一种方法:基本进度条 在 Python 中,我们可以使用标准库 `sys` 和 `time` 来创建一个简单的带百分比的进度条。这种方法适用于需要显示某个过程进度的情况,例如数据处理、文件上传等。 ```python import sys import time def view_bar(num, total): rate = num / total rate_num = int(rate * 100) r = '\r[%s%s]%d%%' % ("=" * rate_num, " " * (100 - rate_num), rate_num) # 使用字符串格式化来构建进度条 sys.stdout.write(r) # 将进度条输出到标准输出 sys.stdout.flush() # 立即刷新输出缓冲区,确保进度条实时更新 if __name__ == '__main__': for i in range(0, 101): # 迭代0到100之间的整数 time.sleep(0.1) # 模拟耗时操作 view_bar(i, 100) # 更新进度条 ``` #### 第二种方法:利用哈希算法生成动态效果(非进度条) 虽然这部分代码与进度条实现关系不大,但我们可以将其中的哈希算法用于某些特殊场景,如文件校验、密码加密等。这里提供了一种通过字符串生成不同长度哈希值的方法: ```python import hashlib a = "ateststring" print(hashlib.md5(a.encode()).hexdigest()) # MD5哈希 print(hashlib.sha1(a.encode()).hexdigest()) # SHA-1哈希 print(hashlib.sha224(a.encode()).hexdigest()) # SHA-224哈希 print(hashlib.sha256(a.encode()).hexdigest()) # SHA-256哈希 print(hashlib.sha384(a.encode()).hexdigest()) # SHA-384哈希 print(hashlib.sha512(a.encode()).hexdigest()) # SHA-512哈希 ``` #### 第三种方法:基于多线程的进度条 对于需要同时处理多个任务的情况,我们可以使用 Python 的 `threading` 库来创建并行任务,并在主进程中显示每个子任务的进度。这里提供了一个基于多线程的进度条示例: ```python #!/usr/bin/env python # -*- coding: utf-8 -*- import threading import time def productor(i): print("thread-%d start" % i) time.sleep(2) # 模拟耗时操作 def start(): threads = [] thread_num = 10 for x in range(thread_num): t = threading.Thread(target=productor, args=(x,)) threads.append(t) for t in threads: t.start() for t in threads: t.join() print('all thread end') start() ``` 在这个例子中,我们定义了 `productor` 函数来模拟每个线程的任务,并在 `start` 函数中启动这些线程。通过 `t.join()` 确保所有线程完成后再结束主进程。虽然这个示例没有直接实现进度条,但可以通过对各个线程的状态进行跟踪来展示整体进度。 #### 更复杂的进度条示例:结合SFTP传输 对于涉及文件传输的场景,可以结合 `paramiko` 库来实现在传输过程中显示进度的功能。下面的代码展示了如何使用 `paramiko` 连接到远程服务器并通过 SFTP 传输文件,并在传输过程中显示进度。 ```python #!/usr/bin/env python # -*- coding: utf-8 -*- import paramiko import sys def progress_bar(transfer, to_be_transferred): percent = (100.0 * transfer / to_be_transferred) sys.stdout.write('\rProgress: %.2f%%' % percent) sys.stdout.flush() def main(): private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname='vm_135', port=22, username='root', pkey=private_key) sftp = ssh.open_sftp() sftp.put('local_file_path', 'remote_file_path', callback=progress_bar) sftp.close() ssh.close() if __name__ == '__main__': main() ``` 在上面的例子中,我们定义了一个 `progress_bar` 函数来显示文件传输的进度。`put` 方法接受一个 `callback` 参数,当文件传输时会调用这个回调函数来更新进度条。 ### 总结 通过上述几种方法,我们可以灵活地在 Python 中实现带有百分比的进度条,无论是简单的单线程应用还是复杂的多线程环境,都可以有效地提高用户体验和程序的可读性。在实际开发中,可以根据具体的业务需求选择合适的方法来实现进度条功能。
- 粉丝: 6
- 资源: 883
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Java 多线程课程的代码及少量注释.zip
- 数据库课程设计-基于的个性化购物平台的建表语句.sql
- 数据库课程设计-基于的图书智能一体化管理系统的建表语句.sql
- Java 代码覆盖率库.zip
- Java 代码和算法的存储库 也为该存储库加注星标 .zip
- 免安装Windows10/Windows11系统截图工具,无需安装第三方截图工具 双击直接使用截图即可 是一款免费可靠的截图小工具哦~
- Libero Soc v11.9的安装以及证书的获取(2021新版).zip
- BouncyCastle.Cryptography.dll
- 5.1 孤立奇点(JD).ppt
- 基于51单片机的智能交通灯控制系统的设计与实现源码+报告(高分项目)