ファイルの行を繰り返し処理し、それぞれの出力を出力したいと考えています。印刷されるすべての行,\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 イテレータ ツール チェーンで最後の要素に到達したかどうかを確認する方法
• Python イテレータから最後の項目を取得する最もクリーンな方法 • Pythonで
リストの最後の要素を別の方法で処理する方法は? ,
• Python: サイクルの最後にいることを知るにはどうすればよいですか? ,
•最後を無視する\n
pythonでreadlines を使用する場合
、
• For ループでの Python の最後の反復、
• Python 3.x: ジェネレーターに要素が残っているかどうかをテストします。
上記の 1 つは、現在の質問の右側のサイドバーの「関連」リストにリストされていましたが、他のものはリストされていませんでした。「関連」サイドバーの質問のいくつかは一見の価値があり、上記のリストに含まれていた可能性があります.