2012-07-28 21 views
15

Tengo problemas para crear un directorio y luego abrir/crear/escribir en un archivo en el directorio especificado. El motivo no me parece claro. Estoy usando os.mkdir() yCrear archivos y directorios a través de Python

path=chap_name 
print "Path : "+chap_path      #For debugging purposes 
if not os.path.exists(path): 
    os.mkdir(path) 
temp_file=open(path+'/'+img_alt+'.jpg','w') 
temp_file.write(buff) 
temp_file.close() 
print " ... Done" 

consigo el error

OSError: [Errno 2] No such file or directory: 'Some Path Name'

Path es de la forma 'Nombre de la carpeta con espacios ONU-escapado'

qué estoy haciendo mal aquí?


Actualización: He intentado ejecutar el código sin crear el directorio

path=chap_name 
print "Path : "+chap_path      #For debugging purposes 
temp_file=open(img_alt+'.jpg','w') 
temp_file.write(buff) 
temp_file.close() 
print " ... Done" 

aún así obtener un error. Confundido más.


Actualización 2: El problema parece ser la img_alt, contiene un '/' en algunos casos, lo que hace que esté causando el problema.

Así que necesito manejar el '/'. ¿Hay alguna forma de escapar el '/' o la eliminación es la única opción?

+1

'ruta + '/' + + img_alt' jpg'' .. mejor usar' OS .path.join() 'aquí – Levon

+0

@Ayos. Publique la ruta con la que está trabajando –

+0

No veo cómo 'path' y' chap_path' y 'img_alt' están relacionados. – tiwo

Respuesta

48
import os 

path = chap_name 

if not os.path.exists(path): 
    os.makedirs(path) 

filename = img_alt + '.jpg' 
with open(os.path.join(path, filename), 'wb') as temp_file: 
    temp_file.write(buff) 

punto clave es usar os.makedirs en lugar de os.mkdir. Es recursivo, es decir, genera todos los directorios intermedios. Consulte http://docs.python.org/library/os.html

Abra el archivo en modo binario ya que está almacenando datos binarios (jpeg).

En respuesta a Editar 2, si img_alt tiene a veces '/' en ella:.

img_alt = os.path.basename(img_alt) 
+0

Entiendo que esta es la forma sintácticamente correcta de hacerlo, pero ¿realmente puede decirme por qué ocurre el error? ¿Y por qué estamos usando 'wb' en lugar de 'w'? – ffledgling

+1

Se genera el error OSError si no se puede llegar al directorio de destino que se creará (el directorio más a la derecha en la ruta) porque todavía no existe un directorio principal. os.mkdir no es recursivo, por lo que no creará todos los directorios necesarios a lo largo de la ruta. os.makedirs sí. –

+1

La 'b' es significativa en plataformas que se comportan de forma diferente para archivos de texto y binarios. Para citar [los documentos] (http://docs.python.org/tutorial/inputoutput.html), "Python en Windows hace una distinción entre el texto y los archivos binarios; los caracteres de fin de línea en los archivos de texto se modifican automáticamente un poco cuando se leen o escriben datos ". – tiwo

0
import os 
    os.mkdir('directory name') #### this command for creating directory 
    os.mknod('file name') #### this for creating files 
    os.system('touch filename') ###this is another method for creating file by using unix commands in os modules 
+0

Consulte la pregunta original y la respuesta aceptada, explícitamente dijo que 'os.mkdir' no funcionó, y la respuesta aceptada señaló que' os.mkdirs' se iba a utilizar. – ffledgling

Cuestiones relacionadas