Je fais quelque chose comme ça:
import pathlib
p = pathlib.Path("temp/").mkdir(parents=True, exist_ok=True)
with p.open("temp."+fn, "w", encoding ="utf-8") as f:
f.write(result)
Message d'erreur: AttributeError: l'objet 'NoneType' n'a pas d'attribut 'open'
Évidemment, en fonction du message d'erreur, mkdir
renvoie None
.
Jean-François Fabre a suggéré cette correction:
p = pathlib.Path("temp/")
p.mkdir(parents=True, exist_ok=True)
with p.open("temp."+fn, "w", encoding ="utf-8") as f:
...
Cela a déclenché un nouveau message d'erreur:
Fichier "/Users/user/anaconda/lib/python3.6/pathlib.py", ligne 1164, ouvert .__ ouvreur = self._opener)
TypeError: un entier est requis (type obtenu str)
Le module pathlib offre une méthode open
qui a une signature légèrement différente de la fonction open intégrée.
pathlib:
Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)
L'intégré:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Dans le cas de cette p = pathlib.Path("temp/")
, il a créé un chemin p
. Par conséquent, si vous appelez p.open("temp."+fn, "w", encoding ="utf-8")
avec des arguments de position (sans mot-clé), le premier doit être mode
, puis buffering
et buffering
suppose un entier, et c’est l’essence de l’erreur; un entier est attendu mais il a reçu la chaîne 'w'
.
Cet appel p.open("temp."+fn, "w", encoding ="utf-8")
tente d'ouvrir le chemin p
(qui est un répertoire) et fournit également un nom de fichier qui n'est pas pris en charge. Vous devez construire le chemin complet, puis appeler la méthode open du chemin ou transmettre le chemin complet à la fonction intégrée open.
Tu pourrais essayer:
p = pathlib.Path("temp/")
p.mkdir(parents=True, exist_ok=True)
fn = "test.txt" # I don't know what is your fn
filepath = p / fn
with filepath.open("w", encoding ="utf-8") as f:
f.write(result)
Vous ne devriez pas donner une chaîne comme chemin. C'est votre objet filepath
qui a la méthode open
.