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 イテレータ ツール チェーンで最後の要素に到達したかどうかを確認する方法 • Python イテレータから最後の項目を取得する最もクリーンな方法 • Python リストの最後の要素を別の方法で処理する方法は? , • Python: サイクルの最後にいることを知るにはどうすればよいですか? , •最後を無視する





\npythonでreadlines を使用する場合
、 • For ループでの Python の最後の反復
Python 3.x: ジェネレーターに要素が残っているかどうかをテストします。

上記の 1 つは、現在の質問の右側のサイドバーの「関連」リストにリストされていましたが、他のものはリストされていませんでした。「関連」サイドバーの質問のいくつかは一見の価値があり、上記のリストに含まれていた可能性があります.

于 2013-03-05T16:36:08.380 に答える