あなたが提供したコードと何をしようとしているか(ファイルカーソルをファイルの先頭に戻します)、実際にはf.truncate
でそれをしていません。あなたは実際にファイルをに切り捨てています。すなわち、ファイルを完全に消去する。 truncate
法上のhelp
パー
:あなたが実際に戻って、ファイルの先頭にカーソルを返すことで何を探している何
truncate(...)
truncate([size]) -> None. Truncate the file to at most size bytes.
Size defaults to the current file position, as returned by tell().
はseek
を使用しています。
求めるのヘルプ:だから
seek(...)
seek(offset[, whence]) -> None. Move to new file position.
、明示的に、バックあなたはf.seek(0)
をしたいファイルの先頭に取得します。
何が起こっているかの例を示すためです。ここでは切り捨てと何が起こるかです:
ファイルは、その中のものがあります。
>>> with open('v.txt') as f:
... res = f.read()
...
>>> print(res)
1
2
3
4
コールtruncate
をし、そのファイルが空になります参照してください。
>>> with open('v.txt', 'r+') as f:
... f.truncate(0)
...
0
>>> with open('v.txt', 'r') as f:
... res = f.read()
...
>>> print(res)
>>>
f.seek(0)
使用:
>>> with open('v.txt') as f:
... print(f.read())
... print(f.read())
... f.seek(0)
... print(f.read())
...
1
2
3
4
0
1
2
3
4
>>>
最初の出力間の長いギャップは、ファイルの最後にカーソルを表示します。次にf.seek(0)
と呼びます(0
の出力はf.seek(0)
のコールです)。f.read()
を出力します。
は、ファイルの内容を投稿できる、1行が欠落していますか? – Chris
@Chris vimで手動で作成したオリジナルのJSONファイルには '{}'しか含まれていません。スクリプトは期待された変更を行い、正しいJSON文字列をファイルに保存しました(最後に改行はありません)。 –
残りのコードはどのようなものかわかりませんが、 'f.truncate'はファイルを消去しますファイルカーソルをファイルの先頭に戻しません。カーソルをファイルの先頭に戻したい場合は、 'f.seek(0)'を探しています。 – idjaw