Вопрос по operating-system, directory, python – Как получить новейший каталог в Python

3

Я ищу способ найти новый каталог, созданный в другом каталоге Единственный метод, который у меня есть,os.listdir() но он показывает все файлы и каталоги внутри. Как я могу перечислить только каталоги и как я могу получить доступ к атрибутам каталога, чтобы найти самые новые созданные? Спасибо

Ваш Ответ

4   ответа
5

import os
import glob
for dir in glob.glob('*'):
  if os.path.isdir(dir):
    print dir,":",os.path.getctime(dir)
Спасибо! но вопрос ОП заключался в том, как найти атрибуты каталогов (время создания) с конечной целью их сортировки. Таким образом я ответил на его вопрос. Второй ответ идет еще дальше, чтобы отсортировать. Я бы предпочел держать их отдельно
Я думаю, я просто запутался, как это решает проблему, когда первая строка проблемыI'm looking for a method that can find the newest directory created inside another directory.
@jessh Ваш второй ответ в основном дублирует этот ответ с добавленной сортировкой. Лучше всего редактировать существующие ответы, если вы просто улучшаете их.
Это находит самый новый?
Спасибо за Ваш ответ! nam
0

os.walk и примеры в документах для простого способа получить каталоги.

root, dirs, files = os.walk('/your/path').next()

Тогда проверьтеos.path.getctime который в зависимости от вашей ОС может быть время создания или модификации. Если вы еще не знакомы с ним, вы также можете прочитать оos.path.join.

os.path.getctime(path) Return the system’s ctime which, on some systems (like Unix) is the time of the last change, and, on others (like Windows), is the creation time for path.

max((os.path.getctime(os.path.join(root, f)), f) for f in dirs)
9
import os
dirs = [d for d in os.listdir('.') if os.path.isdir(d)]
sorted(dirs, key=lambda x: os.path.getctime(x), reverse=True)[:1]

Update:

Может быть, еще несколько объяснений:

[d for d in os.listdir('.') if os.path.isdir(d)]

это понимание списка Вы можете прочитать больше о нихВот

Код делает так же, как

dirs = []
for d in os.listdir('.'):
    if os.path.isdir(d):
        dirs.append(d)

будет делать, но понимание списка считается более читабельным.

sorted()это встроенная функция. Некоторые примерыВот

Код, который я показал, сортирует все элементы в dirs по os.path.getctime (ELEMENT) в обратном порядке. Результат снова список. К которому, конечно, можно получить доступ, используя[index] синтаксис инарезка

Могу ли я использовать listdir () вместо listdir (".")? nam
'sorted (dirs, key = lambda x: os.path.getctime (x), reverse = True) [: 1] & apos; на самом деле отображать список правильно, поэтому я могу получить только первый элемент с помощью функции 'sorted (dirs, key = lambda x: os.path.getctime (x), reverse = True) [0] & apos; ? nam
@HOAINAMNGUYEN Я обновил ответ. Я надеюсь, что теперь вам более понятно, что делает код.
Нет, os.listdir принимает обязательный аргумент. "." просто ярлык для "текущего каталога" (Вы также можете использовать os.curdir вместо этого или, конечно, передать абсолютный / относительный путь к каталогу, который вас интересует)
6

которую я написал, чтобы вернуть имя самой новой директории:

#!/usr/bin/env python

import os
import glob
import operator

def findNewestDir(directory):
    os.chdir(directory)
    dirs = {}
    for dir in glob.glob('*'):
        if os.path.isdir(dir):
            dirs[dir] = os.path.getctime(dir)

    lister = sorted(dirs.iteritems(), key=operator.itemgetter(1))
    return lister[-1][0]

print "The newest directory is", findNewestDir('/Users/YOURUSERNAME/Sites')
Можете ли вы объяснить строку lister = sorted (dirs.iteritems (), key = operator.itemgetter (1))? nam
Конечно! В общем, я просто создаю словарь, в котором ключ - это имя каталога, а значение - время создания каталога. Затем я сортирую словарь по значениям, чтобы найти самый новый каталог. Кроме того, проверитьstackoverflow.com/questions/613183/…
sorted () - встроенная функция. Поиск в Google для сортировки по Python дает вам документы и несколько других вопросов.docs.python.org/library/functions.html#sorted

Похожие вопросы