You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的progress bar无进展的原因是什么?是否陷入循环?

解决alive-progress进度条不更新的问题

你的代码里有几个关键问题导致进度条无法正常工作:

  • 文件指针被耗尽:调用f.readlines()后,文件对象的指针已经移动到文件末尾,后续的for line in f不会遍历任何行,进度条自然不会触发更新。
  • alive_bar参数重复计算长度:data本身就是len(f.readlines())的结果,传入alive_bar时不需要再套一层len()。
  • 文件句柄未安全管理:手动调用result.close()容易因异常导致文件未正确关闭,建议用with语句自动管理。

修正后的代码(小文件适用)

这种方式一次性读取所有行到内存,适合文件体积不大的场景:

import io
from datetime import datetime
from alive_progress import alive_bar

start_time = datetime.now()
print(f"Empece en: {start_time}")

# 用with语句自动管理结果文件的打开/关闭
with io.open("Edificado/edificadoResultadoSinPorBlancos.txt","w",encoding='utf-8',errors="surrogateescape") as result:
    with io.open("Edificado/edificco.txt","r",encoding='utf-8',errors="surrogateescape" ) as f:
        lines = f.readlines()
        # 直接传入总行数给alive_bar
        with alive_bar(len(lines)) as bar:
            for line in lines:
                if '|' in line:
                    line = line.replace("|","-")
                result.write(line)
                bar()

end_time = datetime.now()
print('Duracion: {}'.format(end_time - start_time))

大文件优化版

如果处理的是超大文件,不想一次性加载所有内容到内存,可以先统计行数再重置文件指针:

import io
from datetime import datetime
from alive_progress import alive_bar

start_time = datetime.now()
print(f"Empece en: {start_time}")

with io.open("Edificado/edificadoResultadoSinPorBlancos.txt","w",encoding='utf-8',errors="surrogateescape") as result:
    with io.open("Edificado/edificco.txt","r",encoding='utf-8',errors="surrogateescape" ) as f:
        # 先统计总行数,不加载全部内容
        line_count = sum(1 for _ in f)
        # 将文件指针重置到开头
        f.seek(0)
        
        with alive_bar(line_count) as bar:
            for line in f:
                if '|' in line:
                    line = line.replace("|","-")
                result.write(line)
                bar()

end_time = datetime.now()
print('Duracion: {}'.format(end_time - start_time))

内容的提问来源于stack exchange,提问作者imnach2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:25:34