0

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

我的第一种方法是使用查找hasNext()方法,该方法不存在。我知道StopIteration引发了一个异常,但我不确定如何以 Pythonic 方式使用它来实现我想要的。

4

4 回答 4

6

单独打印第一行,然后打印以 . 开头的其他行",\n"

firstline = next(thefile)
print get_some_output(firstline)
for line in thefile:
    print ",\n" + get_some_output(line)
于 2013-03-05T14:59:22.177 回答
2

这是一个迭代器的包装类,它确实为您提供了一个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()

演示:

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
于 2013-03-05T16:39:14.087 回答
1

您大概想先剥离现有的换行符。然后您可以遍历剥离的行,获取输出,并使用“,\n”将结果连接在一起,如下所示:

f = open('YOUR_FILE', 'r')
print ",\n".join([get_some_output(line.rstrip("\n")) for line in f])
于 2013-03-05T15:25:32.733 回答
1

与您的问题相关的答案出现在下面列出的几个帖子中。尽管其中一些问题的意图与当前问题有很大不同,但它们中的大多数都有如此丰富的答案,我还是在这里列出了它们。请注意,Pavel 的答案是对当前问题的更清洁的解决方案,而不是下面的答案,但一些较旧的答案更普遍适用。

Python:遍历列表中除最后一项以外的所有项目
让 csv.reader 告诉它何时位于最后一行
获取 python for 循环中的第一项和最后一项
检测python'for'循环中的最后一个元素?
Python 如何检查迭代器工具链中是否已到达最后一个元素
从python 迭代器获取最后一项的最简洁方法
如何在python 中以不同方式处理列表中的最后一个元素?,
Python:我如何知道我何时处于最后一个循环
忽略最后一个\n当将 readlines 与 python 一起使用时
For Loop 中的 Python Last Iteration
Python 3.x:测试生成器是否有剩余元素

以上其中一项已列在当前问题的右侧边栏“相关”列表中,但其他未列出。“相关”侧边栏中的几个问题值得一看,并且可能已包含在上面的列表中。

于 2013-03-05T16:36:08.380 回答