使用Python的标准输入如何跳过第一行?

5

我想从Python标准输入中读取行。目前我有:

for line in sys.stdin:
    process line

但我想跳过提供的第一行。

使用 fileinput 实现时,Python 有一种方法可以解决这个问题,它返回 true 如果是第一行,否则返回 false。

fileinput.isfirstline()

理想情况下,对于标准输入,应该有类似的东西,我可以这样做:
if sys.stdin.isfirstline():
     process(first line)
else:
     process everthing else

有没有一种方法可以做到这一点?

谢谢


1
你尝试过使用sys.stdin.next()来跳过吗?这在Python 3中应该有效。 - Eyrofire
@Eyrofire 非常有用,谢谢。但是你怎么获取行号呢?我查了查也没找到。 - birthofearth
你可以使用 for index, line in enumerate(sys.stdin): if index: - jonrsharpe
1个回答

8
您可以使用enumerate来跟踪行号:
for linenum, line in enumerate(sys.stdin):
    if linenum != 0:
        process line

应该只是 if i,或者 可能if i != 0,但绝对不是一个恒等测试,这会让你依赖于内部实现的细节。 - jonrsharpe
@jonrsharpe 抱歉,我对Python不够熟悉 - 什么是身份测试?就像将两个对象相互比较,而 if i != 0 则是比较两个基本的东西吗?无论如何,你和Darrick Herwehe的解决方案都解决了我的问题,谢谢。 - birthofearth
1
@Cole a is b 检查它们是否是同一个对象,而 a == b 检查它们是否具有相同的值。尝试例如 100 * 10 is 1000 vs 100 * 10 == 1000。在这种情况下,if line: 也可以工作,因为 Python 将空可迭代对象 ([], "" 等) 评估为 False - jonrsharpe
@jonrsharpe 你说得对。我经常在Python和Applescript之间切换,有时会忘记这在两种语言中的含义不同。 - Darrick Herwehe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接