web-dev-qa-db-fra.com

pathlib Chemin `write_text` en mode ajout

Existe-t-il un raccourci pour les objets python pathlib.Path Vers write_text() en mode ajout?

La fonction standard open() a mode="a" Pour ouvrir un fichier pour l'écriture et l'ajout au fichier si ce fichier existe, et un Paths - .open() la fonction semble avoir la même fonctionnalité (my_path.open("a")).

Mais qu'en est-il du raccourci pratique .write_text('..'), existe-t-il un moyen d'utiliser pathlib pour ouvrir et ajouter à un fichier en faisant simplement les mêmes choses qu'avec open()?

Pour plus de clarté, je peux le faire

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

mais existe-t-il un autre moyen?

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

8
danodonovan

Pas vraiment, comme vous pouvez le voir dans le module pathlib, il existe 2 types de classes de chemin:

  • classes de chemins purs {PurePath, PurePosixPath, PureWindowsPath}
  • classes de chemins concrets {Path, PosixPath, WindowsPath}.

Les paramètres de ces constructeurs de classes seront simplement *pathsegments.

Et si vous regardez les méthodes de lecture/écriture disponibles (read_text/read_bytes et write_text/write_bytes), vous verrez également que le mode ne sera pas disponible non plus

Donc, comme vous l'avez déjà découvert, la seule façon d'utiliser le mode avec ces classes pathlib est d'utiliser la méthode open, c'est-à-dire:

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

C'est par conception et de cette façon, les classes pathlib sont devenues vraiment "propres". De plus, l'extrait ci-dessus est déjà canonique et ne peut donc pas être simplifié davantage. Vous pouvez cependant utiliser la méthode open en dehors du gestionnaire de contexte:

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

Dans la bibliothèque pathlib, les méthodes Path (). Write_text et Path (). Write_bytes ferment le début lors de sa finalisation. ex:

from pathlib import Path

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

Lorsque vous utilisez un autre mode sur la méthode, comme append (a), la méthode ouvre TextIOWrapper et write_ [text | bytes] ferme automatiquement TextIOWrapper.

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

ou

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

Sinon, il faut le fermer manuellement

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

mais peut être de cette façon:

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