2017-01-12 23 views

答えて

0

これは、open関数のパラメータが間違っているためです。 r+a+を交換しようとすると、ここでreadlines

with open('myfile.txt', 'r+') as myfile: 
    myfile.write("hello once again 2") 
    data = myfile.readlines() #please notice readlines 

print(data) 

readがその理由です。 'a +'フラグを指定してファイルを開くと、読み書き用に開かれますが、ストリームはファイルの最後に位置します。なぜなら、何もないので、あなたは「空」を読むのです。

私は、2つのステップでファイルを扱うようアドバイスします。最初にそれに書き込み、それを読んでください。

ファイルに内容を書き込むが、ファイルを閉じるか、またはflush関数を明示的に呼び出さない限り、ファイルに内容が書き込まれません。このフラッシュは、with open('myfile.txt', 'r+') as myfileによって作成される 'コンテキストマネージャ'の最後に呼び出されます。あなたはwithステートメントの下であなたのコードを書いた後に 'flush'が呼び出されることを保証するラッパーとして 'context manager'を想像することができます。

+1

'a +'の意味はオペレーティングシステムに依存することに注意してください。異なるオペレーティングシステムの 'fopen(3)'マニュアルページを見てください。たとえば、Linuxではストリームはファイルの先頭に置かれ、FreeBSDではファイルの最後に配置されます。どちらの場合も、出力は常に最後に付加されます。 –

0

あなたのコンテンツを書き込むとき、ファイルポインタはファイルの最後にあります。 最初から読み込むには、ポインタをリセットする必要があります。

詳細はmyfile.seek(0)

myfile.read()前を行う参照してください。 https://docs.python.org/2/tutorial/inputoutput.html

f.tell()は、ファイルの先頭からのバイト数で測定されたファイル内のファイルオブジェクトの現在位置 を与える整数を返します。 にファイルオブジェクトの位置を変更するには、f.seek(offset, from_what)を使用します。 位置は、基準点へのオフセットを加算して計算されます。 参照点は、from_what引き数によって選択されます。 from_what ファイルの先頭から0の値を測定すると、1は現在のファイル位置である を使用し、2はファイルの終わりを参照ポイントとして使用します。 from_whatは省略することができ、 ファイルの先頭を参照ポイントとして使用して、デフォルト値は0になります。

0

a+の動作はオペレーティングシステムによって異なる可能性がありますので、コードを移植することをお勧めします。

あなたのファイルが巨大な(利用可能なRAMのかなりの部分にある)でない限り、私は以下のことを行います。

ファイル全体を行のリストに読み込みます。

これで好きなようにmylinesを操作できるようになりました。追加、挿入、変更、または削除することができます。

最後にすべて書き戻してください。

with open('myfile.txt', 'w') as myfile: 
    myfile.writelines(mylines) 

私の知っている限り、これはすべてのPythonプラットフォームで同じように動作するはずです。

関連する問題