2012-07-28 17 views
15

Ho problemi a creare una directory e quindi ad aprire/creare/scrivere in un file nella directory specificata. La ragione mi sembra poco chiara. Sto usando os.mkdir() eCreazione di file e directory tramite 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" 

ottengo l'errore

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

Path è nella forma 'Nome cartella con spazi non-sfuggito'

Che cosa sto facendo sbagliato qui?


Aggiornamento: Ho provato a fare funzionare il codice senza creare la directory

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" 

Ancora un errore. Confuso ulteriormente.


Update 2: Il problema sembra essere l'IMG_ALT, contiene un '/', in alcuni casi, il che rende sta causando il problema.

Quindi ho bisogno di gestire il '/'. Esiste comunque la possibilità di uscire dalla "/" o la cancellazione è l'unica opzione?

+1

'percorso + '/' + IMG_ALT +' jpg'' .. meglio usare' os .path.join() 'qui – Levon

+0

@Ayos. Pubblica il percorso su cui stai lavorando con –

+0

Non vedo come 'path' e' chap_path' e 'img_alt' siano correlati. – tiwo

risposta

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 chiave è quella di utilizzare os.makedirs al posto di os.mkdir. È ricorsivo, cioè genera tutte le directory intermedie. Vedi http://docs.python.org/library/os.html

Apre il file in modalità binaria mentre si memorizzano dati binari (jpeg).

In risposta a Edit 2, se IMG_ALT ha a volte '/' in esso:.

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

Capisco che questo è il modo sintatticamente corretto di farlo, ma puoi effettivamente dirmi perché si verifica l'errore? E perché stiamo usando 'wb' invece di 'w'? – ffledgling

+1

L'OSError viene sollevato se non è possibile raggiungere la directory di destinazione da creare (la directory più a destra nel percorso) perché una directory principale non esiste ancora. os.mkdir non è ricorsivo, quindi non creerà tutte le directory richieste lungo il percorso. os.makedirs lo fa. –

+1

La "b" è significativa su piattaforme che si comportano in modo diverso per file di testo e binari. Per citare [i documenti] (http://docs.python.org/tutorial/inputoutput.html), "Python su Windows distingue tra testo e file binari, i caratteri di fine riga nei file di testo vengono automaticamente modificati leggermente quando i dati vengono letti o scritti. " – 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

Si prega di vedere la domanda originale e la risposta accettata, ha detto esplicitamente che 'os.mkdir' non ha funzionato, e la risposta accettata ha sottolineato che' os.mkdirs' doveva essere usato. – ffledgling

Problemi correlati