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

Python中跟踪标准输入(stdin)行号的优雅实现方法

嘿,这个问题我太熟了!其实Python里有个超适合的工具能帮你搞定,完全不用自己手动维护计数器——就是enumerate()函数,这绝对是最Pythonic的实现方式了。

先给你看直接能用的代码:

import sys

# enumerate的start参数设为1,让行号从1开始计数,符合日常习惯
for line_num, line in enumerate(sys.stdin, start=1):
    # 用rstrip()去掉行尾的换行符,避免输出时多空一行
    print(f"{line.rstrip()} | 行号: {line_num}")

为啥这个好用?因为enumerate()本来就是专门用来遍历可迭代对象(比如这里的sys.stdin),同时返回索引(也就是你的行号)和元素本身的。设置start=1是为了跳过默认的0起始计数,直接从1开始,和我们平时看的行号逻辑一致。

至于你之前试的tell()方法,确实不行——因为标准输入是流式的,它不支持随机访问(也就是seek操作),所以调用tell()会抛出非法seek的错误,而且它本来就只是跟踪字节数,不是行数,完全不适合你的需求。

可能你会好奇,那普通文件对象不是有lineno()方法吗?但sys.stdin不一样,它的lineno()方法并不会随着你读取行而自动递增(因为流式输入没有固定的行位置记录),所以这个方法也派不上用场。

所以结论就是:用enumerate()就对了,简洁、优雅,完全符合Python的设计哲学,不用自己写计数器多此一举。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:28:06