Je prends tous les noms de fichiers dans un certain répertoire dans un list
, et je voudrais écrire cette liste dans un fichier pickle
. Voici le code que j'utilise:
import _pickle as pickle
with open(filepath+'filenames.pkl', 'wb') as f:
pickle.dump(filenames, f)
Cela me donne l'erreur suivante:
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-32-c59e6889d2fe> in <module>()
1 import _pickle as pickle
----> 2 with open(dpath+'filenames.pkl', 'wb') as f:
3 pickle.dump(filenames, f)
FileNotFoundError: [Errno 2] No such file or directory: '/data/train/filenames.pkl'
Je suis censé créer ce fichier, pourquoi ce fichier est-il déjà attendu?
(J'utilise Python 3.6
) Toute aide serait très appréciée.
TIA.
Dans votre cas, très probablement /data/train/
le répertoire n'existe pas
J'ai essayé ce code et j'ai eu la même erreur:
import pickle as pickle
filenames='sadasdas'
with open('/tmp/not_exist/filenames.pkl', 'wb') as f:
pickle.dump(filenames, f)
production:
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-7-6a22c2148796> in <module>()
1 import pickle as pickle
2 filenames='sadasdas'
----> 3 with open('/tmp/not_exist/filenames.pkl', 'wb') as f:
4 pickle.dump(filenames, f)
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/not_exist/filenames.pkl'
Vous pouvez gérer ce problème en vous assurant que le répertoire existe avant d'écrire dans un fichier: l'approche programmatique pour faire de même est la suivante
import os
filename = "/tmp/not_exist/filenames.pkl"
os.makedirs(os.path.dirname(filename), exist_ok=True)
data = 'sadasdas'
with open('/tmp/not_exist/filenames.pkl', 'wb') as f:
pickle.dump(data, f)
J'ai également eu le même problème, mais aucune des réponses ne m'a aidé. Les répertoires étaient là et j'ai utilisé wb
, mais toujours le même problème.
J'espère que cela aide certains qui ont le même problème: j'ai découvert que le problème était que j'avais beaucoup de dossiers, aussi le nom du fichier était trop long (en raison du fait que j'ai créé le nom de fichier sous forme de chaîne dans dans lequel j'essayais d'indiquer les caractéristiques de ce fichier) et le dossier dans lequel j'essayais de vider soulèverait "Le ou les noms de fichier seraient trop longs pour le dossier de destination" lorsque j'ai essayé de déplacer ce fichier manuellement.
Après avoir raccourci le nom du fichier, le problème a été résolu.
J'ai eu un problème similaire lors de l'écriture en utilisant un chemin d'accès relatif (et un lien symbolique). Le répertoire existait de manière provocante mais il soulevait toujours le FileNotFoundError.
Le problème a disparu lorsque je suis passé à l'utilisation du chemin absolu
abspath = pathlib.Path(filename).absolute()
with open(str(abspath), 'wb') as f:
pickle.dump(thing_to_pickle, f)
J'ai dû désactiver 'l'accès contrôlé aux dossiers' à partir de Windows Defender sur Windows 10.
D'autres antivirus/pare-feu peuvent avoir le même effet.
Assurez-vous que le filepath
que vous utilisez est quelque chose qui existe réellement sur votre ordinateur. Parfois, nous copions et collons du code ailleurs et oublions de changer les noms des lecteurs. Vous vous adressez peut-être à un lecteur non existant.