Python如何实现自动过滤零值的自定义格式已用时间输出
实现方案
直接手动拆分时间单位、过滤零值后拼接字符串即可,不需要依赖timedelta的默认格式化逻辑,修改后的完整代码如下:
import time import sys start = time.time() while True: total_seconds = int(time.time() - start) # 拆分各时间单位 days, remaining = divmod(total_seconds, 86400) hours, remaining = divmod(remaining, 3600) minutes, seconds = divmod(remaining, 60) # 组装单位片段,过滤0值 time_parts = [] if days > 0: time_parts.append(f"{days}d") if hours > 0: time_parts.append(f"{hours}h") if minutes > 0: time_parts.append(f"{minutes}m") # 秒数兜底,所有单位为0时显示0s if seconds > 0 or not time_parts: time_parts.append(f"{seconds}s") output = ", ".join(time_parts) sys.stdout.write('\r\033[2K' + output) sys.stdout.flush() time.sleep(0.1)
关键逻辑说明
- 用
divmod做整除取余一步完成单位拆分,比手动单独写//和%计算更简洁 - 按天、时、分、秒的优先级判断,仅当单位数值大于0时才加入输出片段列表,自动过滤零值单位
- 增加秒数兜底逻辑:程序刚启动总时长为0时,会直接显示
0s,避免空输出 - 新增
sys.stdout.flush()调用,解决部分终端环境下输出缓冲导致的刷新不及时问题
内容的提问来源于stack exchange,提问作者Ruri
相关产品推荐
相关产品推荐

