Python年度进度条提示工具的实现与使用

人生苦短,要时刻提醒自己时间在流逝。

安装:
$ pip install datebar

使用:
$ datebar
passed days: 79
the progress of the year: 22%
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░22%

Github:
https://github.com/Neulana/datebar

喜欢自取,能赏个 star 就更好啦!比心


Python年度进度条提示工具的实现与使用

23 回复

手机下载即刻 app,关注对应主题,并开启推送就搞定了……


import sys
import time
from datetime import datetime

class YearProgressBar:
    def __init__(self, year=None):
        self.year = year or datetime.now().year
        self.start_date = datetime(self.year, 1, 1)
        self.end_date = datetime(self.year, 12, 31, 23, 59, 59)
        
    def calculate_progress(self):
        """计算年度进度百分比"""
        now = datetime.now()
        if now.year != self.year:
            return 100.0 if now.year > self.year else 0.0
            
        total_seconds = (self.end_date - self.start_date).total_seconds()
        elapsed_seconds = (now - self.start_date).total_seconds()
        
        # 确保进度在0-100之间
        progress = min(100.0, max(0.0, (elapsed_seconds / total_seconds) * 100))
        return round(progress, 2)
    
    def create_bar(self, width=30, show_percentage=True):
        """创建进度条字符串"""
        progress = self.calculate_progress()
        filled_width = int(width * progress / 100)
        bar = "█" * filled_width + "░" * (width - filled_width)
        
        result = f"[{bar}]"
        if show_percentage:
            result += f" {progress:.1f}%"
        return result
    
    def display(self, refresh_interval=3600):
        """显示并自动刷新进度条"""
        try:
            while True:
                # 清屏并移动光标到行首
                sys.stdout.write("\r\033[K")
                
                # 显示当前时间和进度条
                current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                bar = self.create_bar()
                sys.stdout.write(f"{current_time} {self.year}年进度: {bar}")
                sys.stdout.flush()
                
                # 如果进度达到100%,退出循环
                if self.calculate_progress() >= 100:
                    print(f"\n{self.year}年已结束!")
                    break
                    
                time.sleep(refresh_interval)
                
        except KeyboardInterrupt:
            print("\n\n进度条已停止")

# 使用示例
if __name__ == "__main__":
    # 创建当前年份的进度条
    ypb = YearProgressBar()
    
    # 方法1:获取单次进度条
    print("当前年度进度:")
    print(ypb.create_bar(width=40))
    
    # 方法2:实时显示(每小时刷新)
    print("\n实时进度(按Ctrl+C停止):")
    ypb.display(refresh_interval=3600)  # 每小时刷新一次
    
    # 方法3:查看特定年份
    ypb_2023 = YearProgressBar(2023)
    print(f"\n2023年最终进度: {ypb_2023.create_bar()}")

这个工具的核心是YearProgressBar类,它通过计算当前时间在一年中的位置来生成进度条。calculate_progress()方法精确计算百分比,create_bar()生成可视化进度条,display()提供实时刷新功能。

使用起来很简单:实例化类后调用create_bar()获取进度条字符串,或者用display()开启实时监控。进度条宽度和刷新频率都可以自定义。

这个工具适合放在终端启动脚本里,或者集成到其他Python项目中作为时间提醒功能。

总结:用datetime计算时间差,按比例显示进度条。

等着接我的 star 吧

回头下一个试试

写个 Ruby 的玩玩:
percent = ((Time.now.yday.to_f / Time.now.at_end_of_year.yday) * 100).round
bar = ‘▓’ * percent + ‘░’ * (100 - percent)
puts "Progress of this year:"
puts(bar + percent.to_s + ‘%’)

输出:
Progress of this year:
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░22%

excel 能做吗

测试对 python2 稍有不兼容.随手提了个合并

什么意思,好像不太明白~

坐等 PHP 版

再写个 Go 的:
package main

import (
“fmt”
“math”
“strings”
“time”
)

func main() {
now := time.Now()
passed := now.YearDay()
format := “2006-01-02 15:04:05”
end, _ := time.Parse(format, fmt.Sprintf("%d-12-31 23:59:59", now.Year()))
total := end.YearDay()
progress := math.Round((float64(passed) / float64(total)) * 100)
bar := strings.Repeat(“▓”, int(progress)) + strings.Repeat(“░”, (100-int(progress)))
fmt.Printf(“Progress of this year %d of %d:\n”, passed, total)
fmt.Println(bar)
}

感觉够折腾的。。。。。

感觉 Ruby 跟 Python 真的很像啊

为你的折腾精神点赞👍

可以 fork 吗?

#9 即刻 app 有对应的提醒主题

Go 版运行快很多。。。

继续玩:

Go 版加了:

■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□ 22%(80/365)

今年还要工作多少天 Twitter 机器人:

回到顶部