Python_进度条简单实现

一、Python 实现进度条

考虑到进度条输出的灵活性,最终是以文本形式返回而不是直接打印。
这样进度条和文字表达连接更加自由

# python 3.6
# author: Scc_hy 
# create date: 2019-08-20
# Function: 列表遍历进度条
# file_name: progressing

class Progress():
    """
    对列表遍历,返回对应遍历进度  
    param lsit_i: list 
    param width: int 进度条长度 

    例子:
        m = ['asdas', 'asdas','qwe124', 'asd112', '12asdx', '12asdx', '12asdx']
        p = Progress(m, width = 45)
        for i in m:
            msg = p.progress()
            print('目前打印: {}, 进度: {}'.format(i, msg))
    """
    def __init__(self, list_i, width = 25):
        self.list_i = list_i
        self.list_long = len(list_i)
        self.width = width
        self.start = 0

    def get_progress(self, percent = 0):
        """
        百分比显示方式 
        """
        left = percent * self.width // self.list_long
        pct = percent * self.width / self.list_long
        right = self.width - left
        left_now = '#' * left
        right_now = ' ' * right
        mult = 100 / self.width
        return "[{}{}] {:.1f}%".format(left_now, right_now, pct * mult)

    def flush_percent(self):
        """
        刷新开始位置
        """
        self.start += 1
    
    def progress(self):
        """
        输出进度条
        """
        if self.start <= self.list_long:
            self.flush_percent()
            msg = self.get_progress(self.start)
            return msg


if __name__ == '__main__':
    m = ['asdas', 'asdas','qwe124', 'asd112', '12asdx', '12asdx', '12asdx']
    p = Progress(m, width = 45)
    for i in m:
        msg = p.progress()
        print('目前打印: {}, 进度: {}'.format(i, msg))

在这里插入图片描述

二、实际场景应用

以下是不完整脚本

import os
import re
import argparse 
from datetime import datetime 
from progressing import Progress

def Count_Lines(filroot):
    out_name = 'out_{}.csv'.format(datetime.now().strftime('%Y%d%m'))
    outfil = os.path.join(filroot, out_name)
    for root, dirs, files in os.walk(filroot):
        # 批量读取
        len_out = 0
        files_csv = [i for i in files if 'csv' in i and i != out_name]
        p = Progress(files_csv)
        for i in  files_csv:
            fil = os.path.join(filroot, i)
            f = open(fil,'r', encoding='utf-8')
            f_read = f.read()
            f.close()

            # 记录行数 
            cnt = re.findall(r'\n', f_read, re.S)
            len_out += len(cnt)
            msg = p.progress()
            print('{} 合并文件: {}, {}行.'.format(msg, i, len(cnt)))

            # 依次写入需要
            f1 = open(outfil,'a+', encoding='utf-8')
            words = re.compile("'")  # 关键词定位
            new_f = words.sub('', f_read, re.S)  # 替换关键词
            f1.write(new_f)
            f1.close()

    return len_out + 1


if __name__ == '__main__' :
    args = parse_args()
    filroot = args.base_root
    final_fil = 'out_{}.csv'.format(datetime.now().strftime('%Y%d%m'))
    print("最终文件: {}, {}行".format(final_fil, Count_Lines(filroot)))
    input("\n输入任意字符结束")

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Scc_hy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值