2010-03-08 1 views
31

При попытке открыть файл в записи режиме со следующим кодом:открыть файл в «W» режиме: IOError: [Errno 2] Нет такого файла или каталога

packetFile = open("%s/%s/%s/%s.mol2" % ("dir", "dir2", "dir3", "some_file"), "w")

Дает мне следующее сообщение об ошибке:

IOError: [Errno 2] No such file or directory: 'dir/dir2/dir3/some_file.mol2'

режим «ш» следует создать файл, если он не существует, верно? Так как же может произойти эта ошибка?

ответ

33

Вы увидите эту ошибку, если каталог, содержащий файл, который вы пытаетесь открыть, не существует, даже при попытке открыть файл в режиме «W».

Поскольку вы открываете файл с относительным путем, возможно, вы смущены о том, что именно представляет собой этот каталог. Попробуйте положить быструю печать, чтобы проверить:

import os 

curpath = os.path.abspath(os.curdir) 
packet_file = "%s/%s/%s/%s.mol2" % ("dir", "dir2", "dir3", "some_file") 
print "Current path is: %s" % (curpath) 
print "Trying to open: %s" % (os.path.join(curpath, packet_file)) 

packetFile = open(packet_file, "w") 
1

Убедитесь, что у сценария есть права на запись в этот каталог. Попробуйте следующее:

chmod a+w dir/dir2/dir3 

Обратите внимание, что это даст права на запись всем в этом каталоге.

+2

-1; это не является возможной причиной ошибки OP. Если у вас нет прав на запись в каталог, Python предоставит вам 'IOError: [Errno 13] Permission denied: 'testdir/foo'', а не' No такой файл или каталог'. –

14

Поскольку у вас нет «стартовой» косой черты, ваш скрипт python ищет этот файл относительно текущего рабочего каталога (а не для корня файловой системы). Также обратите внимание, что каталоги, ведущие к файлу, должны существовать!

И: используйте os.path.join, чтобы объединить элементы пути.

.: например os.path.join("dir", "dir2", "dir3", "myfile.ext")

1

У меня был такой же ошибка, но в моем случае причина была под Windows, путь длиннее, чем ~ 250 символов.

+0

Я также нашел проблему с длиной окна. – blueray

0

Аналогичная проблема возникла в среде Windows. Решение заключалось в том, чтобы добавить «C:» в абсолютный путь. Моя цель состояла в том, чтобы сохранить некоторые файлы пользователя Desktop

file_path = os.path.join(os.environ["HOMEPATH"], os.path.join("Desktop", 
    "log_file.log_%s_%s" %(
    strftime("%Y_%m_%d", localtime()), "number_1"))) 

я пытался открыть эту папку для сохранения , таких как

file_ref = open(file_path, "w") 

Я добавил это для того, чтобы запустить

file_ref = open(("C:\\"+file_path), "w") 
Смежные вопросы