我想遍历文件的行,并为每个行打印一些输出。除最后一行外,所有打印的行都应,\n
在末尾有一个。
我的第一种方法是使用查找hasNext()
方法,该方法不存在。我知道StopIteration
引发了一个异常,但我不确定如何以 Pythonic 方式使用它来实现我想要的。
我想遍历文件的行,并为每个行打印一些输出。除最后一行外,所有打印的行都应,\n
在末尾有一个。
我的第一种方法是使用查找hasNext()
方法,该方法不存在。我知道StopIteration
引发了一个异常,但我不确定如何以 Pythonic 方式使用它来实现我想要的。
单独打印第一行,然后打印以 . 开头的其他行",\n"
。
firstline = next(thefile)
print get_some_output(firstline)
for line in thefile:
print ",\n" + get_some_output(line)
这是一个迭代器的包装类,它确实为您提供了一个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
您大概想先剥离现有的换行符。然后您可以遍历剥离的行,获取输出,并使用“,\n”将结果连接在一起,如下所示:
f = open('YOUR_FILE', 'r')
print ",\n".join([get_some_output(line.rstrip("\n")) for line in f])
与您的问题相关的答案出现在下面列出的几个帖子中。尽管其中一些问题的意图与当前问题有很大不同,但它们中的大多数都有如此丰富的答案,我还是在这里列出了它们。请注意,Pavel 的答案是对当前问题的更清洁的解决方案,而不是下面的答案,但一些较旧的答案更普遍适用。
• Python:遍历列表中除最后一项以外的所有项目,
•让 csv.reader 告诉它何时位于最后一行,
•获取 python for 循环中的第一项和最后一项,
•检测python'for'循环中的最后一个元素?
• Python 如何检查迭代器工具链中是否已到达最后一个元素,
•从python 迭代器获取最后一项的最简洁方法,
•如何在python 中以不同方式处理列表中的最后一个元素?,
• Python:我如何知道我何时处于最后一个循环,
•忽略最后一个\n
当将 readlines 与 python 一起使用时,
• For Loop 中的 Python Last Iteration,
• Python 3.x:测试生成器是否有剩余元素
以上其中一项已列在当前问题的右侧边栏“相关”列表中,但其他未列出。“相关”侧边栏中的几个问题值得一看,并且可能已包含在上面的列表中。