открыть файл в режиме "w": IOError: [Errno 2] Нет такого файла или каталога - PullRequest
37 голосов
/ 08 марта 2010

Когда я пытаюсь открыть файл в режиме , пишите со следующим кодом:

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'

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

Ответы [ 7 ]

44 голосов
/ 08 марта 2010

Вы увидите эту ошибку, если каталог , содержащий файл, который вы пытаетесь открыть, не существует даже при попытке открыть файл в режиме "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")
15 голосов
/ 08 марта 2010

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

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

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

7 голосов
/ 10 мая 2017

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

1 голос
/ 29 мая 2019

У меня была та же проблема, но моя основная причина отличалась от той, что была здесь. Мысль, которой я поделюсь, если кто-то столкнется с той же проблемой.

В моем случае я случайно поместил скобки в строку «с»:

with (open(os.path.join(curpath, unique_name)), 'w') as fw:

Дала следующую ошибку (изменена, чтобы скрыть детали компании и для ясности):

Traceback (most recent call last):
  File "./crap.py", line 60, in uniquify
    with (open(os.path.join(curpath, unique_name)), 'w') as fw:
IOError: [Errno 2] No such file or directory: '/<mypath>/bin/python/<filename>'

Эти скобки ставят 'w' с функцией with (), а не с open (), как предполагалось. Я удивлен, что выдает эту ошибку ввода-вывода, которая подразумевает, что это что-то не так с вызовом open (), что значительно усложнило его отслеживание, чем если бы оно явно происходило из вызова with ().

Я не поверил этим результатам, я просто изменил его, чтобы повторить, и да, я получаю ту же ошибку.

Когда я переключаю скобки на правильную версию:

with (open(os.path.join(curpath, unique_name), 'w')) as fw:

работает как задумано.

0 голосов
/ 01 июля 2018

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

0 голосов
/ 18 декабря 2017

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

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")
0 голосов
/ 08 марта 2010

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

chmod a+w dir/dir2/dir3

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...