python迭代器中的最后一个元素
我希望遍历文件的行,并为每个行打印一些输出。除最后一行外,所有打印的行的末尾都应有一个\npython迭代器中的最后一个元素,python,Python,我希望遍历文件的行,并为每个行打印一些输出。除最后一行外,所有打印的行的末尾都应有一个\n 我的第一个方法是使用look查找hasNext方法,但它并不存在。我知道引发了StopIteration异常,但我不确定如何以Python的方式使用它来实现我想要的结果。单独打印第一行,然后打印前面的其他行,\n 您可能想先去掉现有的换行符。然后,您可以遍历剥离的行,获得输出,并使用,\n将结果连接在一起,如下所示: f = open('YOUR_FILE', 'r') print ",\n".join(
我的第一个方法是使用look查找hasNext方法,但它并不存在。我知道引发了StopIteration异常,但我不确定如何以Python的方式使用它来实现我想要的结果。单独打印第一行,然后打印前面的其他行,\n
您可能想先去掉现有的换行符。然后,您可以遍历剥离的行,获得输出,并使用,\n将结果连接在一起,如下所示:
f = open('YOUR_FILE', 'r')
print ",\n".join([get_some_output(line.rstrip("\n")) for line in f])
与您的问题相关的答案出现在下面列出的几个帖子中。尽管其中一些问题的意图与现在的问题大不相同,但大多数问题的答案都非常翔实,我已经在这里列出了。注意,Pavel的答案比下面的答案更清楚地解决了当前的问题,但是一些旧的答案更普遍 •, • , • , • • , • , • , • , • , • , •
上面的一个问题列在右侧边栏的“相关”列表中,但其他问题没有列在右侧边栏的“相关”列表中。“相关”侧栏中的几个问题值得一看,并且可能已包含在上面的列表中。这里是迭代器的包装类,它确实为您提供了hasNext属性:
class IteratorEx(object):
def __init__(self, it):
self.it = iter(it)
self.sentinel = object()
self.nextItem = next(self.it, self.sentinel)
self.hasNext = self.nextItem is not self.sentinel
def next(self):
ret, self.nextItem = self.nextItem, next(self.it, self.sentinel)
self.hasNext = self.nextItem is not self.sentinel
return ret
def __iter__(self):
while self.hasNext:
yield self.next()
演示:
印刷品:
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 False
您正在读取的文件的最后一行是否有换行符?您知道也可以使用“\n”.joinlines来实现它吗?如果它不适合您的内存,请不要这样做。
iterex = IteratorEx(xrange(10))
for i in iterex:
print i, iterex.hasNext
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 False