Найти - Пользователи
Полная версия: Как создать папки по шаблону используя два параметра?
Начало » Python для новичков » Как создать папки по шаблону используя два параметра?
1 2
klerk87
Доброй ночи!
Начинаю изучать Питон. Пишу программу для автоматического создания папок. Нужно спросить при запуске два параметра (дата и номер) потом по шаблону создать папки используя эти параметры. Использую модуль OS. Получается только создать папку находящуюся в каталоге где лежит скрипт Питона. При попытке создать в этой папке вложенную в неё папку возникает ошибка. А как сделать подстановку моих параметров в имя папки вообще не представляю. Пытался читать хелп на английском, мало помогло…
Что-то русскоязычной литературы по Питону маловато.. С английским плоховато, надо подучить…Есть ли переведенный хелп на русский язык? Использую Питон 3.2.3..
py.user.next
klerk87
А как сделать подстановку моих параметров в имя папки вообще не представляю.
>>> namefmt = 'name_{0}_{1}'
>>> 
>>> a, b = 1, 2
>>> name = namefmt.format(a, b)
>>> print(name)
name_1_2
>>>

klerk87
При попытке создать в этой папке вложенную в неё папку возникает ошибка.
приведи код
4kpt
Есть два метода:

mkdir Создается только одна папка. Рекурсивное создание невозможно.
os.mkdir("Имя_будущей_папки")
makedirs Создается рекурсивно (если в пути папки отсутсвуют - то они будут созданы).
os.makedirs("Путь_с_именем_будущей_папки")

Кроме того необходимо помнить, что многие комманды пляшут от рабочей паки.
Чтобы сменить рабочую папку надо
os.chdir("Путь_к_новой_рабочей_папке")
А рабочую папку можно узнать
os.getcwd()


Приведу пример кода функции для создания папки по указанному пути с указанной датой
def create_folder(path, date):
    os.chdir(path)
    os.mkdir(str(data))

P.S. Не забывайте, что для указания пути необходимо использовать два обратных слеша или сырые строки, т.е. путь “c:\Program\data” будет выглядеть
"c:\\Program\\data"
или
r"c:\Program\data"
klerk87
nomer = input(….)
import os
os.makedirs(nomer)
в таком варианте работает, создается папка, к примеру 2100.

добавляем кавычки:
os.makedirs(“nomer”) - создается папка nomer

если создавать папку, вкладывая её в другую:
os.makedirs(kiwi\\nomer), то какие варианты кавычек ни ставь, создается не папка 2100, а с именем nomer. Как это побороть?

4kpt
Конечно. Вы пытаетесь в строковой переменной передаль значение переменной. А интерпретатор, бедолага, должен понять, что вы имеете ввиду. Он же ждет, что ему передадут строку. Необходимо предварительно эту строку сфоримировать. И передать ему, как родному :)
Смотрите:
new_path = "kiwi\\%s" % (nomer)
os.makedirs(new_path)
Первая строчка в результате подстановки получится следующего вида:
Если nomer равен 2100
new_path = "kiwi\\2100"
Если nomer равен 5250
new_path = "kiwi\\5250"
Надеюсь теперь понятно :)

P.S. Для закрепления

a = 12    # Число
b = "12"  # Строка
c = a*2   #  24
e = b*2   # "1212"
f = "a"   # Строка. Это не ссылка на переменную а!
r = f*3   # "aaa"
klerk87
это я понял, спасибо!
А как одновременно подставить 3 параметра? Есть номер, день и месяц. Нужно их подставить в строку вида: temp\\nomer\\COD_dd-mm-2013. чтобы в итоге получить строку
temp\\2077\\COD_09-08-2013 для создания папки.
alexbadaloff
klerk87
А как одновременно подставить 3 параметра?
Такое ощущение, что вы издеваетесь:
>>> day = 9
>>> month = 8
>>> year = 2013
>>> new_path = "temp\\2077\\COD_%02d-%02d-%04d" % (day,month,year)
>>> new_path
'temp\\2077\\COD_09-08-2013'

Еще вариант, использовать .format:
>>> new_path = "temp\\2077\\COD_{0}-{1}-{2}".format(day,month,year)
>>> new_path
'temp\\2077\\COD_9-8-2013'
Но тут я не знаю, как перед 9 и 8, по умолчанию ставить 0. Сходу нагуглить не получилось, подскажите, кто знает.
4kpt
alexbadaloff
Посмотрите .zfill() - метод строк…
py.user.next
alexbadaloff
Но тут я не знаю, как перед 9 и 8, по умолчанию ставить 0. Сходу нагуглить не получилось, подскажите, кто знает.
python.org. str.format()

>>> '{:02}'.format(1)
'01'
>>>
4kpt
Еще можно:
"%02u" %(1)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB