web-dev-qa-db-ja.com

追加モードのpathlibパス `write_text`

追加モードのwrite_text()へのpython _pathlib.Path_オブジェクトへのショートカットはありますか?

標準の open() 関数には_mode="a"_があり、ファイルを開いて書き込みを行い、ファイルが存在する場合はそのファイルに追加します。 Paths .open() 関数は同じ機能(my_path.open("a"))を持っているようです。

しかし、便利な.write_text('..')ショートカットはどうですか、pathlibを使用してopen()と同じことを行うだけでファイルを開いて追加する方法はありますか?

明確にするために、私はできる

_with my_path.open('a') as fp:
    fp.write('my text')
_

しかし、別の方法はありますか?

my_path.write_text('my text', mode='a')

8
danodonovan

実際には、pathlibモジュールで確認できるように、2種類のパスクラスが存在します。

  • ピュアパスクラス {PurePath、PurePosixPath、PureWindowsPath}
  • コンクリートパスクラス {Path、PosixPath、WindowsPath}。

これらのクラスコンストラクターのパラメーターは*pathsegments

また、利用可能な読み取り/書き込みメソッド(read_text/read_bytesおよびwrite_text/write_bytes)を見ると、モードも利用できないことがわかります。

したがって、すでに発見したように、これらのpathlibクラスでモードを使用できる唯一の方法は、openメソッドを使用することです。つまり、

with my_path.open("a") as f:
    f.write("...")

これは仕様によるもので、pathlibクラスは本当に「クリーン」になっています。また、上記のスニペットはすでに標準的であるため、これ以上単純化することはできません。ただし、コンテキストマネージャの外でopenメソッドを使用することもできます。

f = my_path.open("a")
f.write("...")
7
BPL

ライブラリpathlibでは、メソッドPath()。write_textおよびPath()。write_bytesがstartmentをクローズしてファイナライズします。例:

from pathlib import Path

Path('file.txt').write_text('my text')
Path('file1.txt').write_bytes(b'my text')

追加(a)などのメソッドで他のモードを使用すると、メソッドはTextIOWrapperを開き、write_ [text | bytes]はTextIOWrapperを自動的に閉じます。

f = Path('file.txt')
f.open("a")
f.write_text('my text')

または

f = Path('file1.txt')
f.open("a")
f.write_bytes(b'my text')

それ以外の場合は手動で閉じる必要があります

f = Path('file1.txt').open('a')
f.write('my text')
f.close()

しかし、このようにすることができます:

fp = Path('test.txt').open('a')
<_io.TextIOWrapper name='test.txt' mode='a' encoding='UTF-8'>
fp.write_text('my text')

fq = Path('test1.txt').open('a', encoding='iso8859-1')
<_io.TextIOWrapper name='test1.txt' mode='a' encoding='iso8859-1'>
fq.write_bytes(b'my text')
2
britodfbr