13

定義上、「a +」モードは、追加と読み取りの両方のためにファイルを開きます。追加は機能しますが、読む方法は何ですか?いくつか検索しましたが、どこにもわかりませんでした。

f=open("myfile.txt","a+")
print (f.read())

これを試してみましたが、空白で印刷されます。

4

4 に答える 4

19

f.seek()ファイルオフセットをファイルの先頭に設定するために使用します。

注: Python 2.7 より前のバージョンでは、オペレーティング システムによっては、ファイルの位置が常にファイルの末尾を指していないというバグがありました。これにより、一部のユーザーが元のコードを機能させる可能性があります。たとえば、CentOS 6 では、コードは意図したとおりに動作しますが、本来の動作ではありません。

f = open("myfile.txt","a+")
f.seek(0)
print f.read()
于 2013-02-01T04:53:42.637 に答える
2

を使用してファイルを開くと、ファイルf=open(myfile.txt,"a+")は読み取りと書き込みの両方が可能になります。

デフォルトでは、ファイル ハンドルはファイルの先頭を指します。

f.tell()これは、どちらが になるかによって決定できます0L

In [76]: f=open("myfile.txt","a+")

In [77]: f.tell()
Out[77]: 0L

In [78]: f.read()
Out[78]: '1,2\n3,4\n'

ただし、f.write書き込む前にポインターを最終行に移動するようにします。

于 2013-02-01T04:54:10.543 に答える
0

OS に依存する Python の新しいバージョンにはまだ癖があり、stdio での fopen() 関数の実装の違いによるものです。

Linux のman fopen:

a+ - 読み取りおよび追加用に開きます (ファイルの最後に書き込みます)。ファイルが存在しない場合は作成されます。読み取りの初期ファイル位置はファイルの先頭ですが、出力は常にファイルの末尾に追加されます。

OS X:

``a+'' - 読み書き用にオープン。ファイルが存在しない場合は作成されます。ストリームはファイルの最後に配置されます。ファイルへの後続の書き込みは、介在する fseek(3) などに関係なく、常にその時点でのファイルの終わりで終了します。

MSDN は、ポインターが最初に設定された場所を実際には述べていません。書き込み時に最後に移動するだけです。

ファイルが「a」または「a+」アクセス タイプで開かれると、すべての書き込み操作はファイルの最後で行われます。ファイル ポインタは、fseek または rewind を使用して再配置できますが、書き込み操作が実行される前に常にファイルの最後に戻されます。したがって、既存のデータを上書きすることはできません。

Python 2.7.x と 3k の両方を使用して、さまざまなシステムで違いを複製するのは非常に簡単です。.open .tell

OS を介して何かを扱う場合は、明示的な を使用するなどの予防措置を講じる方が安全.seek(0)です。

于 2013-02-01T05:33:36.677 に答える
0

モード r+ 読み取りおよび書き込み ファイルの先頭から開始 r 読み取り専用 ファイルの先頭から開始 a+ 読み取り/追加。ファイルの最後に書き込むことにより、ファイルの内容を保持します

幸運を!イザベル・ルイス

于 2013-02-01T05:13:40.420 に答える