2017-03-05 8 views
0

特定のディレクトリのすべてのファイル名をlistに入れていますので、このリストをpickleファイルに書きます。ここで私が使用していたコードがあります:Pickleファイルに書き込み中のFileNotFoundError

import _pickle as pickle 
with open(filepath+'filenames.pkl', 'wb') as f: 
    pickle.dump(filenames, f) 

これは私に次のエラーを与える:

--------------------------------------------------------------------------- 
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' 

このファイルがすでに予想され、なぜ私は、このファイルを作成することが出来るのですか?

(私はPython 3.6を使用しています) ご協力いただければ幸いです。

TIA。あなたのケースでは

+2

は '/ data/train /'ですか? –

+0

はい現在ありません – Patthebug

+0

ルート( '/')ディレクトリに 'train'フォルダがある' data'フォルダがありますか?あなたが参照している 'data'ディレクトリが' root'ディレクトリ/ではなくあなたのプロジェクトディレクトリにあることを絶対に確かめてください。 –

答えて

0

おそらく/data/train/ディレクトリには、私はこのコードを試してみましたが、同じエラーを得た

存在しません:

import pickle as pickle 
filenames='sadasdas' 
with open('/tmp/not_exist/filenames.pkl', 'wb') as f: 
    pickle.dump(filenames, f) 

出力:あなたが作ることによって、この問題を扱うことができる

--------------------------------------------------------------------------- 
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' 

ファイルに書き込む前にディレクトリが存在することを確認してください。これを行うためのプログラム的なアプローチはこれです

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) 

REF:https://stackoverflow.com/a/12517490/3027854

0

相対パス名(およびシンボリックリンク)を使用して、書きながら、私は同様の問題がありました。ディレクトリは挑戦的に存在しましたが、FileNotFoundErrorを引き上げていました。

問題は、私は

abspath = pathlib.Path(filename).absolute() 
with open(str(abspath), 'wb') as f: 
    pickle.dump(thing_to_pickle, f) 
関連する問題