Запись в новый каталог на 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()
Моя цель состоит в том, чтобы python записывал файл (под файловым именем) в файл в папке "address" в папке "feed" в текущем каталоге (IE, где сохраняется питон script)
Я просмотрел модуль os, но я не хочу менять текущий каталог, и эти каталоги еще не существуют.
Ответы
Ответ 1
Во-первых, я не уверен на 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')
Ответ 2
Это создаст файл feed/address/file.txt
в том же каталоге, что и текущий script:
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')
Ответ 3
Команды типа 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')