を印刷し、次の文を使用してファイルの内容を印刷しようとしているが、ファイルの内容を印刷しようとしている間、私が手出力は空のスペースです: -は、Python:私はプログラミングの初心者です、ファイルの内容
with open('myfile.txt','a+') as myfile:
myfile.write("hello once again 2")
data=myfile.read()
print(data)
を印刷し、次の文を使用してファイルの内容を印刷しようとしているが、ファイルの内容を印刷しようとしている間、私が手出力は空のスペースです: -は、Python:私はプログラミングの初心者です、ファイルの内容
with open('myfile.txt','a+') as myfile:
myfile.write("hello once again 2")
data=myfile.read()
print(data)
これは、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'を想像することができます。
あなたのコンテンツを書き込むとき、ファイルポインタはファイルの最後にあります。 最初から読み込むには、ポインタをリセットする必要があります。
詳細は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になります。
a+
の動作はオペレーティングシステムによって異なる可能性がありますので、コードを移植することをお勧めします。
あなたのファイルが巨大な(利用可能なRAMのかなりの部分にある)でない限り、私は以下のことを行います。
ファイル全体を行のリストに読み込みます。
これで好きなようにmylines
を操作できるようになりました。追加、挿入、変更、または削除することができます。
最後にすべて書き戻してください。
with open('myfile.txt', 'w') as myfile:
myfile.writelines(mylines)
私の知っている限り、これはすべてのPythonプラットフォームで同じように動作するはずです。
'a +'の意味はオペレーティングシステムに依存することに注意してください。異なるオペレーティングシステムの 'fopen(3)'マニュアルページを見てください。たとえば、Linuxではストリームはファイルの先頭に置かれ、FreeBSDではファイルの最後に配置されます。どちらの場合も、出力は常に最後に付加されます。 –