2011-10-28 16 views
10

Actualmente, tengo el siguiente código ...Escribir en un nuevo directorio en Python sin cambiar de directorio

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

Mi objetivo es tener pitón escribir el archivo (bajo nombre_archivo) a un archivo en el campo "Dirección "carpeta en la carpeta" feed "en el directorio actual (IE, donde se guarda el script python)

He investigado el módulo os, pero no quiero cambiar mi directorio actual y estos directorios lo hacen no existe ya

Respuesta

9

En primer lugar, no estoy 100% seguro de entender la pregunta, así que permítanme decir mi suposición: 1) ¿Quieres escribir a una archivo en un directorio que aún no existe. 2) La ruta es relativa (al directorio actual). 3) No desea cambiar el directorio actual.

Por lo tanto, dado que: Echa un vistazo a estas dos funciones: os.makedirs y os.path.join. Como desea especificar una ruta relativa (con respecto al directorio actual), no desea agregar la inicial "/".

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) entonces no aumentar OSError excepción si existe dir. El valor predeterminado es aumentar OSError si existe un directorio. – kaicarno

0

Los comandos como os.mkdir en realidad no requieren que hagas la carpeta en tu directorio actual; puedes poner una ruta relativa o absoluta.

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

no sé de una manera de crear tanto de forma recursiva las carpetas y abrir el archivo además de escribir una función tal sí mismo - esto es aproximadamente el código en línea. os.makedirs te llevará la mayor parte del camino hasta allí; utilizando el mismo objeto misterioso auto no nos han mostrado:

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

Esto creará el archivo feed/address/file.txt en el mismo directorio que el script actual:

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