如何为Python操作Oracle数据库插入数据添加进度条?
给Python插入脚本添加进度条的实现方案
要给你的文件读取+数据库插入脚本添加进度条,最便捷的方式是使用tqdm第三方库,下面是具体步骤和修改后的代码:
1. 安装依赖库
首先安装tqdm(一个轻量易用的进度条工具):
pip install tqdm
2. 修改后的完整代码
from tqdm import tqdm insert_sty = "insert into MRSTY (CUI,TUI,STN,STY,ATUI,CVF) values (:0,:1,:2,:3,:4,:5)" records = [] file_path = "../umls_files/umls-2023AA-metathesaurus-full/2023AA/META/MRSTY.RRF" with open(file_path, 'r') as f: # 先统计文件总行数,让进度条显示更准确 total_lines = sum(1 for _ in f) f.seek(0) # 回到文件开头 # 读取文件时显示进度条,同时直接处理每条记录 for line in tqdm(f, total=total_lines, desc="读取并处理文件"): line = line.strip() parts = line.split("|") if parts: parts.pop() # 移除末尾空字符串 records.append(parts) # 插入数据库时显示进度条 for i in tqdm(records, desc="插入数据库记录"): try: cur.execute(insert_sty, i) except Exception as e: # 用换行确保错误信息不覆盖进度条 print(f"\n错误记录: {i}") print(f"错误信息: {str(e)}") conn.commit() print("\n所有记录提交完成")
关键改动说明
- 导入
tqdm库,用它包装循环即可生成动态进度条 - 读取文件时先统计总行数,让进度条能显示准确的完成比例
- 将原代码中“先存所有记录再批量处理末尾空字符串”的逻辑,改为读取时直接处理,节省内存同时让进度条更早反馈
- 移除了原代码中每条插入都打印的
record inserted,避免刷屏干扰进度条显示 - 异常处理中添加
\n,确保错误信息能在进度条下方正常显示
无第三方库的简易实现
如果不想安装额外库,也可以手动实现简单进度条:
insert_sty = "insert into MRSTY (CUI,TUI,STN,STY,ATUI,CVF) values (:0,:1,:2,:3,:4,:5)" records = [] file_path = "../umls_files/umls-2023AA-metathesaurus-full/2023AA/META/MRSTY.RRF" with open(file_path, 'r') as f: total_lines = sum(1 for _ in f) f.seek(0) processed = 0 for line in f: line = line.strip() parts = line.split("|") if parts: parts.pop() records.append(parts) processed += 1 # 打印简易进度条,\r实现覆盖更新 progress = (processed / total_lines) * 100 print(f"\r读取进度: {progress:.1f}% [{processed}/{total_lines}]", end="") print("\n读取完成") total_records = len(records) processed = 0 for i in records: try: cur.execute(insert_sty, i) processed += 1 progress = (processed / total_records) * 100 print(f"\r插入进度: {progress:.1f}% [{processed}/{total_records}]", end="") except Exception as e: print(f"\n错误记录: {i}") print(f"错误信息: {str(e)}") conn.commit() print("\n所有记录提交完成")
这种方式没有速度、剩余时间等高级显示,但无需额外依赖。
内容的提问来源于stack exchange,提问作者rshar
相关产品推荐
相关产品推荐

