文字列の内容を置き換えて更新された内容を書き込むことで、ファイル内のコンテンツを更新しようとしています。Python truncateメソッドのサイズ引数の動作
これで、古いコンテンツを削除して更新したものを書き戻す必要があります。そのためには、truncate
メソッドを使用しています。 truncate
ファイルの文書を1として
。切り捨て([サイズ])
サイズオプション。オプションのsize引数が指定されている場合、ファイルは (そのサイズ以下)に切り捨てられます。サイズはデフォルトで現在の の位置になります。
今、私は何が起こっているのか理解できません。
def fileIsWritingInBinary():
with open("hello.txt", "r+") as f:
fileContent = f.read()
f.truncate(0) # used different size argument
# update new content
fileContent = fileContent.replace("World", "StackOverFlow")
# write updated content
f.write(fileContent)
ファイルhello.txt
に書き込まれます内容は異なる形式で、すなわち
4865 6c6c 6f00 0000 0000 0000 0048 656c
6c6f 2c20 576f 726c 6421
である。しかし、以下のように変更を行った後、それは完全に、すなわちtruncate
呼び出しの前f.seek(0)
を追加動作します。 truncate(0)
呼び出しは異なるフォーマットで書き込まれますファイルにリードしていたのはなぜ
def fileIsWritingInBinary():
with open("hello.txt", "r+") as f:
fileContent = f.read()
f.seek(0) // line added
f.truncate()
# update new content
fileContent = fileContent.replace("World", "StackOverFlow")
# write updated content
f.write(fileContent)
# hello.txt content
# Hello, StackOverFlow!
今の質問は、
- のですか?
- サイズの引数を
0
から別の番号に変更しましたが、私は同じ結果を得ていました。
感謝を。 'write'がOSに依存する理由は何ですか?またはそれの内部の働きについてもっと学ぶための記事。 – Rahul
['io'-module](https:// github。com/python/cpython/tree/master/Modules/_io)はC言語で書かれているため、C言語の関数の中には、OSごとに(あるいはコンパイラによって)動作が異なるものがあります。あなたが詳細な振る舞いを必要とする場合は、おそらく最も良い(しかし、必ずしも理解できるとは限りません)。 :) – MSeifert