2011-10-28 26 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')