Pythonで長い複数行の文字列を1行ずつ読み取る方法


84

私は多くの行を持つ文字列の壁を持っています。for句を含む行を1つずつ読み取るにはどうすればよいですか?これが私がやろうとしていることであり、そのfor line in textData行で参照されているtextData変数でエラーが発生します。

for line in textData
    print line
    lineResult = libLAPFF.parseLine(line)

textData変数は存在します。ダウンする前に出力しますが、プリコンパイラーがエラーを発生させていると思います。

TIA

デニス


行を別々の文字列に分割する必要があります。「/ n」が含まれていても、個別の文字列にはなりません。
n_A 2013年

(トレースバックで)どのようなエラーが発生しますか?の値はtextData何ですか?SSCCEを教えていただけますか。これは、実行して同じ問題を確認し、説明できるものです。
abarnert 2013年

また、「エラーを発生させている」と思う「プリコンパイラ」とは何ですか?
abarnert 2013年

回答:


142

使用は.splitlines()どうですか?

for line in textData.splitlines():
    print(line)
    lineResult = libLAPFF.parseLine(line)

@BenjaminGruenbaum:"/r""/n"スラッシュと文字からなるだけで、通常の2文字の文字列です。意味"\n"ですか?
abarnert 2013年

それはコピーですか、それともイテレータですか?
user3226167 2017

@ user3226167リストを返します。
Benjamin Gruenbaum 2017

リストを作成せず、代わりにイテレータに戻るスプリットラインのイテレータバージョンはありますか?
youda0 0818年

StringIOがありますが、これは低レベルのインターフェースです。つまり、この場合、すでに文字列があります。イテレータ(ファイルなど)を1行ずつ反復する場合は、別の質問です。覚えておいてください-この場合、あなたはすでに文字列を持っています。
BenjaminGruenbaum18年

6

改行で分割します。

for line in wallop_of_a_string_with_many_lines.split('\n'):
  #do_something..

文字列を反復処理する場合、行ではなく、その文字列内で文字ごとに反復処理します。

>>>string = 'abc'
>>>for line in string:
    print line

a
b
c

これを今読んでいる人は、代わりにstr.splitlines()関数を使用してください。このソリューションでは、いくつかのエッジケースが発生します。例:各行を反復処理するとします。オブジェクトの最後の行の終わりに\ nがある場合、forループは空の行でタスクを実行しようとし、エラーを引き起こします。受け入れられた解決策で上で議論された。
thefrollickingnerd

1

この答えは、いくつかのエッジケースで失敗します(コメントを参照)。上記の受け入れられたソリューションはこれらを処理します。str.splitlines()行く方法です。それでも、この回答は参考にしておきます。

古い(間違った)答え:

s =  \
"""line1
line2
line3
"""

lines = s.split('\n')
print(lines)
for line in lines:
    print(line)

ありがとう、@ PRあなたも私に何かを教えてくれました。import re
DKean 2013年

改行文字を分割するためだけに(または)のre.split代わりに使用するのはなぜですか?単一の静的なリテラル文字から正規表現を構築することは、理由もなく物事をより複雑にするだけです。str.splitsplitlines
abarnert 2013年

@PR前の議論に合わせるために、s.split( '\ n')を書くべきだったと思います。r '\ n'による分割は機能しません。
デイビッドエプスタイン

私のコードのコピー&ペーストは私のために働きます(ちょうどそれを試しました)。しかし、今それを見てください(3年後、私はちょうど使用することができましたs.split。今それを変更する
PR

1
split('\n')\rスティング内のすべての文字を保持します。キャリッジリターンは削除されないため、問題が発生する可能性があります。
つまようじアネモネ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.