2016-07-15 17 views
-1

だから私はこのエラーを受信し続ける:のPythonとValueError

ValueError: Mixing iteration and read methods would lose data

そして、1)私はそれを受けていますなぜ私はかなり理解していない、そして2)同様の問題を持つ人々は、彼らのコードで物事をやっているように見えます初心者(自分のようなもの)よりはるかに複雑なものが適応できます。

私のコードのアイデアは、data_file.txtを読み込み、各行を独自の配列に変換することです。

これまでのところ、私はこれがあります。

array = [] #declaring a list with name '**array**' 
    with open('file.txt','r') as input_file: 
    for line in input_file: 
     line = input_file.readlines() 
     array.append(line) 
     print('done 1') #for test purposes 
     return array 

をそして、私はエラーが供給保ちます。

"Value error: Mixing iteration and read methods would lose data "message while extracting numbers from a string from a .txt file using python

上記の質問は、しかし、彼のコードでは、行をスキップし、それの特定の部分に呼び出すように範囲を使用していた、配列の項目に呼び出して、類似した何かをやっているように見えた、私はそれを必要はありません。 。私が必要とするのは、すべての行を呼び出して配列にすることだけです。この質問に

Python: Mixing files and loops

、もう一度、私は理解することができますよりもはるかに何かを頼まれていました。私が理解したところでは、彼はエラーの後に再起動して続行するコードを望んでおり、答えはその部分に関するものでした。もう一度私が探しているものではありません。 readlinesはあなたに1つのショットでは、ファイル全体を与えるので、

with open('file.txt','r') as input_file: 
    array = input_file.readlines() 
return array 

:配列要素ごとに1つの行で、ファイルの行の配列を作るために

+2

なぜあなたはファイルに対して 'for'-loopingとループ内で' readlines'を呼びますか? – user2357112

+0

ファイルの内容全体の* n *コピーのリストを含めるかどうかを指定します。* n *はファイル内の行数ですか?あなたのコードに基づいて、それはあなたがしようとしているようです。 – pzp

+0

OPはおそらくそれに新しいです。ですから、あなたがopをやっていることはおおよそ次のように解釈されます。それぞれの 'line'に対して、各行がファイル全体であることを望みます。あなたのコードは、あなたのループで各行をつかんでいて、それぞれの行にうんざりしているので、本当に理にかなっています。 – limbo

答えて

2

エラーはかなり分かりやすいです(それが何であるかわかると、ここに行きます)。

ループfor line in input_file:から開始します。ファイルオブジェクトはPythonで反復可能です。ファイル内の行を繰り返し処理します。これは、ループの反復ごとに、lineにファイルの次の行が含まれることを意味します。

次は手動で行を読むline = input_file.readlines()。これはファイルから行を読み込もうとしますが、すでにforループの行を繰り返しています。

通常、ファイルは順番に読み込まれ、後ろ向きには読み込まれません。あなたが終わるのは紛争です。 readlineを使って行を読むと、ループ内のイテレータは、それが戻ってこないので、次の行を強制的に返すでしょう。しかし、次の行を返すことは有望です。エラーは、readlineがアクティブなイテレータがあり、それを呼び出すとループを妨げることがわかっていることを伝えています。

line = input_file.readlines()を取り出すと、ループは期待通りに動作します。

2

。あるいは、

return list(open('file.txt','r')) 

は、the docsと同じになります。

+0

これはOPが望んでいることをどのように知っていますか?私はOPの質問が現時点ではあまりにも曖昧であるため、誰も正確な答えを出すことはできないと思う。 – pzp

+0

これを使っても同じエラーが出ます。 –

+0

@JMaloneあなたの質問に*コードブロックの代わりにこれらの*だけを使用する場合でも? ( 'return'文を追加するように編集しました) – cxw