abrir archivo en modo “w”: IOError: No existe tal archivo o directorio

Cuando bash abrir un archivo en modo de escritura con el siguiente código:

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

Me da el siguiente error:

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

El modo “w” debería crear el archivo si no existe, ¿verdad? Entonces, ¿cómo puede ocurrir este error?

Verá este error si el directorio que contiene el archivo que está intentando abrir no existe, incluso al intentar abrir el archivo en modo “w”.

Ya que está abriendo el archivo con una ruta relativa, es posible que esté confundido acerca de qué es exactamente ese directorio. Intente poner una impresión rápida para comprobar:

 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") 

Como no tiene una barra diagonal, su secuencia de comandos de Python está buscando este archivo en relación con el directorio de trabajo actual (y no con la raíz del sistema de archivos). También tenga en cuenta que los directorios que conducen al archivo deben existir!

Y: use os.path.join para combinar elementos de una ruta.

Por ejemplo: os.path.join("dir", "dir2", "dir3", "myfile.ext")

Tuve el mismo error, pero en mi caso la causa fue, en Windows, una ruta de más de ~ 250 caracteres.

Compruebe que la secuencia de comandos tiene permisos de escritura en ese directorio. Prueba esto:

 chmod a+w dir/dir2/dir3 

Tenga en cuenta que esto le dará permisos de escritura a todos en ese directorio.

Problema similar ocurrió en el entorno de Windows. La solución fue agregar “C:” a la ruta absoluta. Mi objective era guardar algunos archivos en el escritorio del usuario.

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

Entonces estaba tratando de abrir este directorio para guardar como

 file_ref = open(file_path, "w") 

Agregué esto para correr

 file_ref = open(("C:\\"+file_path), "w") 

Este error también se producirá si está intentando sobrescribir un enlace flexible roto en un archivo con el mismo nombre. En ese caso, elimine el enlace flexible roto y podrá escribir el nuevo archivo.