2011-10-28 8 views
10

Obecnie mam następujący kod ...Pisząc do nowego katalogu w Pythonie bez zmiany katalogu

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

Moim celem jest, aby zapisać plik python (pod nazwa_pliku) do pliku w polu „adres "folder w folderze" feed "w bieżącym katalogu (IE, gdzie zapisywany jest skrypt Pythona)

Zajrzałem do modułu os, ale nie chcę zmieniać obecnego katalogu, a te katalogi nie już nie istnieje.

Odpowiedz

9

Po pierwsze, nie jestem 100% przekonany, rozumiem pytanie, więc pozwól mi podać moje założenie: 1) Chcesz napisać do plik w katalogu, który jeszcze nie istnieje. 2) Ścieżka jest względna (do bieżącego katalogu). 3) Nie chcesz zmieniać bieżącego katalogu.

Tak więc, biorąc pod uwagę: Sprawdź dwie funkcje: os.makedirs i os.path.join. Ponieważ chcesz określić ścieżkę względną (w odniesieniu do bieżącego katalogu), nie chcesz dodawać początkowego "/".

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) wtedy nie podnieść wyjątek OSError jeśli reż istnieje. Wartością domyślną jest podniesienie OSError, jeśli katalog istnieje. – kaicarno

0

Polecenia takie jak os.mkdir w rzeczywistości nie wymagają utworzenia folderu w bieżącym katalogu; możesz umieścić względną lub absolutną ścieżkę.

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

Nie wiem o sposób zarówno rekurencyjnie tworzyć foldery i otwórz plik oprócz pisania taką funkcję siebie - oto mniej więcej w jednej linii kodu. os.makedirs dostaniesz tam większość drogi; stosując ten sam tajemniczy obiekt siebie nie wykazały nam:

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

To utworzy plik feed/address/file.txt w tym samym katalogu co skryptu:

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