假设我有如下文件:
apples 53 24
apples 23 56
apples 24 98
oranges 10 34
oranges 12 38我想知道是否有办法只打印第一行包含“苹果”和第一行包含“桔子”。
注:编号。包含“苹果”和“橘子”的线条可能并不总是一样的。所以,我不能具体到一个行号。但是,包含“橙子”的行总是跟在含有“苹果”的行后面。
任何帮助都是非常感谢的。谢谢!
预期产出:
apples 53 24
oranges 10 34发布于 2019-05-16 18:52:34
给你:
with open(file) as fp:
seen = set([])
for line in fp:
token = line.split()[0]
if token not in seen:
seen.add(token)
print(line)发布于 2019-05-16 19:00:04
这对于itertools.groupby来说是一个很好的用途,只要您想要每个组中的第一个--换句话说,如果列表后面还有另一组苹果,它也会打印第一组苹果(在问题中不清楚这是否可能,或者应该发生什么),这样可以处理任意数量的组:
from itertools import groupby
with open('test.txt') as file:
for k, g in groupby(file, key=lambda x: x.split()[0]):
print(next(g).strip())结果:
苹果53 24 桔子10 34
发布于 2019-05-16 18:52:27
你可以用itertools.dropwhile!
from itertools import dropwhile
with open("...") as f:
lines = iter(f)
print(next(lines)) # prints the first line
print(next(dropwhile(lambda line: line.startswith("apples"), lines)))https://stackoverflow.com/questions/56174856
复制相似问题