Python年度进度条提示工具的实现与使用
人生苦短,要时刻提醒自己时间在流逝。
安装:
$ pip install datebar
使用:
$ datebar
passed days: 79
the progress of the year: 22%
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░22%
Github:
https://github.com/Neulana/datebar
喜欢自取,能赏个 star 就更好啦!比心
Python年度进度条提示工具的实现与使用
手机下载即刻 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 吧
回头下一个试试
3Q
写个 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 版运行快很多。。。
整理了一下: https://github.com/gihnius/year_progress 哈哈
继续玩:
Go 版加了:
■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□ 22%(80/365)
今年还要工作多少天 Twitter 机器人:

