2011-10-28 61 views
10

目前,我有以下代碼...寫在Python一個新的目錄,而不改變目錄

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

我的目標是讓蟒蛇寫入文件(下FILE_NAME)到一個文件中的「地址「文件夾在當前目錄(IE中,其中保存了python腳本)的」feed「文件夾中

我已經查看了os模塊,但我不想更改我的當前目錄和這些目錄尚不存在。

回答

9

首先,我不是100%的信心,我理解這個問題,所以讓我說出我的假設: 1)要寫入文件在尚不存在的目錄中。 2)路徑是相對的(到當前目錄)。 3)你不想改變當前目錄。

所以,考慮到: 看看這兩個函數:os.makedirs和os.path.join。既然你想指定一個相對路徑(相對於當前目錄),你不想添加初始的「/」。

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)如果目錄存在不會再去提高OSERROR例外。如果目錄存在,缺省是引發OSError。 – kaicarno

0

os.mkdir這樣的命令實際上並不要求您在當前目錄中創建文件夾;你可以放一個相對或絕對的路徑。

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

我不知道的方式既遞歸創建的文件夾並打開文件,除了自己寫這樣的功能 - 這裏是大約在行的代碼。 os.makedirs將爲您帶來大部分途徑;使用相同的神祕自我的對象,你還沒有告訴我們:

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

這將在同一目錄作爲當前創建該文件feed/address/file.txt

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