Как получить последнюю папку в каталоге, используя Python - PullRequest
0 голосов
/ 13 января 2020

Мне нужно получить каталог самой последней созданной папки. Я использую программу, которая будет выводить новую папку run ## каждый раз, когда она выполняется (т.е. run01, run02, run03 и т. Д.). В любой папке run## находится файл данных, который я хочу проанализировать (file-i-want.txt).

folder_numb = 'run01'
dir = os.path.dirname(__file__)
filepath = os.path.join(dir, '..\data\directory',run_numb,'file-i-want.txt')

Короче говоря, я хочу пропустить необходимость жесткого кода в run## и просто получить каталог файла в самой последней созданной папке run##.

Ответы [ 3 ]

1 голос
/ 13 января 2020

glob.glob ('run *') вернет список файлов / каталогов, которые соответствуют шаблону, упорядоченному по имени.

, поэтому, если вы хотите последний запуск, ваш код будет:

import glob
print(glob.glob('run*')[-1])  # raises index error if there are no runs

ВАЖНО, файлы упорядочены по именам, в этом случае, например, «run21» придет ПОСЛЕ «run100», поэтому вам нужно будет использовать достаточно большое количество цифр, чтобы не увидеть эту ошибку. или просто посчитайте количество совпавших файлов и воссоздайте имя папки с этим номером.

вы можете использовать glob для проверки количества файлов с одинаковым шаблоном имени:

import glob
n = len(glob.glob('run*')) # number of files which name starts with 'run'
new_run_name = 'run' + str(n)

Примечание: с этим кодом имена файлов начинаются с 0, если вы хотите начать с 1, просто добавьте 1 к n.

, если вы хотите всегда вместо двойного di git номер прогона (00, 01, 02) из 'str (n)' использовать 'str (n) .zfill (2)'

пример:

import glob
n = len(glob.glob('run*')) # number of files which name starts with 'run'
new_run_name = 'run' + str(n + 1).zfill(2)
1 голос
/ 13 января 2020

pathlib рекомендуется более os для задач, связанных с файловой системой.

ссылка

Вы можете попробовать:

filepath = Path(__file__).parent / 'data/directory'
fnames = sorted(list(Path(filepath).rglob('file-i-want.txt')), key=lambda x: Path.stat(x).st_mtime, reverse=True)
filepath = str(fnames[0])
filepath
1 голос
/ 13 января 2020

Вы можете получить дату создания с помощью os.stat

path = '/a/b/c'

#newest

newest = max([f for f in os.listdir(path)], key=lambda x: os.stat(os.path.join(path,x)).st_birthtime)

# all files sorted

sorted_files = sorted([f for f in os.listdir(path)],key=lambda x: os.stat(os.path.join(path, x)).st_birthtime, reverse=True)
...