Intentar usar abrir (nombre de archivo, ‘w’) le da a IOError: No existe tal archivo o directorio si el directorio no existe

Estoy tratando de crear y escribir en un archivo de texto usando Python. He buscado y no puedo encontrar una solución / razón para este error.

Aquí está el código que no funciona:

afile = 'D:\\temp\\test.txt' outFile = open(afile, 'w' ) outFile.write('Test.') outFile.close() # Error: 2 # Traceback (most recent call last): # File "", line 1, in  # IOError: [Errno 2] No such file or directory: 'D:\\temp\\test.txt' # 

La mayoría de las respuestas que encontré están relacionadas con las barras diagonales en el camino, así que …

 I tried 'D:/temp/test.txt' and got an error. I tried r'D:\temp\test.txt' and got an error. 

Cuando bash crear un archivo en la raíz de D: / tengo éxito.

 'D:/test.txt' works. 'D:\\test.txt' works. r'D:\test.txt' works. 

Parece que no puedo crear la ruta del directorio que me gustaría al intentar crear el archivo . ¿Cuál es el método correcto para crear archivos en una ruta específica con Python en Windows (7)? ¿Estoy malinterpretando lo que puede hacer open ()? ¿Crea directorios si no existen o necesito crear explícitamente la ruta del directorio antes de usar open () en el modo ‘escribir’ para crear un archivo?

Tiene razón al suponer que el directorio principal del archivo debe existir para que el proceso de open tenga éxito. La forma más sencilla de lidiar con esto es hacer una llamada a os.makedirs .

De la documentación :

os.makedirs (ruta [, modo])

Función recursiva de creación de directorios. Como mkdir() , pero hace que todos los directorios de nivel intermedio sean necesarios para contener el directorio de hoja.

Entonces tu código podría ejecutar algo como esto:

 filename = ... dirname = os.path.dirname(filename) if not os.path.exists(dirname): os.makedirs(dirname) with open(filename, 'w'): ... 

Si intenta crear un archivo en un directorio que no existe, obtendrá ese error.

Es necesario asegurarse de que el directorio existe primero. Puedes hacer eso con os.makedirs() según esta respuesta .

Alternativamente, puede verificar si el archivo existe antes de abrirlo con:

os.path.exists (afile)

Que dirá Verdadero o Falso, dependiendo de si existe.