2011-10-28 12 views
10

Attualmente, ho il seguente codice ...Scrivendo in una nuova directory in Python senza cambiare directory

file_name = content.split('=')[1].replace('"', '') #file, gotten previously 
fileName = "/" + self.feed + "/" + self.address + "/" + file_name #add folders 
output = open(file_name, 'wb') 
output.write(url.read()) 
output.close() 

Il mio obiettivo è quello di avere python scrivere il file (sotto nome_file) in un file nel campo "Indirizzo "cartella nella cartella" feed "nella directory corrente (IE, dove lo script python è salvato)

Ho esaminato il modulo os, ma non voglio cambiare la mia directory corrente e queste directory non esiste già.

risposta

9

In primo luogo, io non sono sicuro al 100% ho capito la domanda, quindi lasciatemi dire la mia ipotesi: 1) Si vuole scrivere su un file in una directory che non esiste ancora. 2) Il percorso è relativo (alla directory corrente). 3) Non si desidera modificare la directory corrente.

Quindi, dato che: Dai un'occhiata a queste due funzioni: os.makedirs e os.path.join. Poiché si desidera specificare un percorso relativo (rispetto alla directory corrente) non si desidera aggiungere l'iniziale "/".

dir_path = os.path.join(self.feed, self.address) # will return 'feed/address' 
os.makedirs(dir_path)        # create directory [current_path]/feed/address 
output = open(os.path.join(dir_path, file_name), 'wb') 
+0

os.makdirs (dir_path, exist_ok = True) poi non alzare eccezione OSError se esiste dir. L'impostazione predefinita è di aumentare OSError se la directory esiste. – kaicarno

0

I comandi come os.mkdir in realtà non richiedono che si effettui la cartella nella directory corrente; puoi mettere un percorso relativo o assoluto.

os.mkdir('../new_dir') 
os.mkdir('/home/you/Desktop/stuff') 

non so di un modo per far in modo ricorsivo creare le cartelle e aprire il file oltre a scrivere una tale funzione da soli - qui è di circa il codice in-line. os.makedirs ti porteranno la maggior parte del modo lì; utilizzando lo stesso oggetto misterioso sé non ci hanno mostrato:

dir = "/" + self.feed + "/" + self.address + "/" 
os.makedirs(dir) 
output = open(os.path.join(dir, file_name), 'wb') 
7

Questo creerà il file feed/address/file.txt nella stessa directory dello script corrente:

import os 

file_name = 'file.txt' 
script_dir = os.path.dirname(os.path.abspath(__file__)) 
dest_dir = os.path.join(script_dir, 'feed', 'address') 
try: 
    os.makedirs(dest_dir) 
except OSError: 
    pass # already exists 
path = os.path.join(dest_dir, file_name) 
with open(path, 'wb') as stream: 
    stream.write('foo\n')