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 Path
s - .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')
Pas vraiment, comme vous pouvez le voir dans le module pathlib, il existe 2 types de classes de chemin:
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("...")
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')