Как перейти в несколько каталогов Python - PullRequest
0 голосов
/ 06 января 2010

Я создаю несколько каталогов в день. Через семь дней я собираюсь поместить песочницу в эти каталоги и удалить их. Я использую отметку времени, чтобы назвать их. У меня есть код ниже, чтобы показать вам, что у меня есть.

today = datetime.date.today() # Today's date Binary
todaystr = datetime.date.today().isoformat() # Todays date as a string
minus_sevent = today - datetime.timedelta(days = 7) # 7 days ago as a string
minus_seven = minus_sevent.isoformat()
old_folders = minus_seven + '*'
def delete_sandbox():

    if os.path.exists(old_folders):
        os.chdir(old_folders)
        mks_drop_sandbox()
        os.chdir(rootDir)
        for filename in glob.glob(old_folders):
            shutil.rmtree(old_folders)
        print 'Sandboxes from 7 days ago removed'

if __name__ == '__main__': myObject = delete_sandbox()

Это был похожий код, который я использовал прежде, чтобы удалить песочницу и удалить один каталог. Но в эти дни может быть сделано несколько сборок, и я хочу знать, как войти в каждую папку и выполнить эти задачи.

Папки в каталогах будут создаваться с указанием времени и даты, у меня есть переменные, которые просто удаляют все папки с установленной датой независимо от времени.

Спасибо

Ответы [ 3 ]

3 голосов
/ 06 января 2010

old_folders = minus_seven + '*'

Это не делает то, что вы думаете, что делает. Это дает вам имя папки, которая буквально оканчивается на *. Позже os.path.exists() вернет False.

Что вам нужно сделать, это перебрать каталоги:

for d in os.listdir(os.getcwd()):
    if not os.path.isdir(d) or not d.startswith(minus_seven):
        continue
    # Do what you need to with 'd' here.

или в виде списка:

minus_seven_dirs = [d for d in os.listdir(os.getcwd())
    if os.path.isdir(d) and d.startswith(minus_seven)]

По сути, вы не можете os передать функции списку и ожидать, что они будут делать правильные вещи. Они работают по путям по одному.

0 голосов
/ 06 января 2010

У вас есть два варианта:

Использование os.walk

for root, dirs, files in os.walk('your root'):
for dir in dirs:
        os.chdir(os.path.join(root, dir))
        delete_sandbox()

Используйте os.path.walk , затем измените delete_sandbox для использования в качестве обратного вызова.

def delete_sandbox(arg, dirname, names):
0 голосов
/ 06 января 2010

«Я хочу знать, как войти в каждую папку»

Вы спрашиваете о os.path.join для создания полного пути?

http://docs.python.org/library/os.path.html#os.path.join

или os.chdir для смены рабочего каталога?

http://docs.python.org/library/os.html#os.chdir

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...