Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python迭代器中的最后一个元素_Python - Fatal编程技术网

python迭代器中的最后一个元素

python迭代器中的最后一个元素,python,Python,我希望遍历文件的行,并为每个行打印一些输出。除最后一行外,所有打印的行的末尾都应有一个\n 我的第一个方法是使用look查找hasNext方法,但它并不存在。我知道引发了StopIteration异常,但我不确定如何以Python的方式使用它来实现我想要的结果。单独打印第一行,然后打印前面的其他行,\n 您可能想先去掉现有的换行符。然后,您可以遍历剥离的行,获得输出,并使用,\n将结果连接在一起,如下所示: f = open('YOUR_FILE', 'r') print ",\n".join(

我希望遍历文件的行,并为每个行打印一些输出。除最后一行外,所有打印的行的末尾都应有一个\n


我的第一个方法是使用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