Запись в новый каталог в Python без изменения каталога - PullRequest
11 голосов
/ 29 октября 2011

В настоящее время у меня есть следующий код ...

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

Моя цель состоит в том, чтобы python записал файл (под file_name) в файл в папке «address» в папке «feed» в текущем каталоге (IE, где сохранен скрипт python)

Я заглянул в модуль os, но я не хочу менять текущий каталог, и эти каталоги еще не существуют.

Ответы [ 3 ]

10 голосов
/ 29 октября 2011

Во-первых, я не уверен на 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')
9 голосов
/ 29 октября 2011

Это создаст файл 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')
0 голосов
/ 29 октября 2011

Такие команды, как 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')
...