2013-09-21 4 views
3

Я пытаюсь создать рекурсивный список файлов из каталога, а затем отсортировать их по возрасту. Я не очень-то сильно забочусь о расширении файла, сначала старейший файл.Создайте рекурсивный отсортированный список файлов (по старшему)

вот что я до сих пор, но оно не сортировать по дате ...

например: /Главная/пользователь/папки/dir1 /Главная/пользователь/папки/dir2 /дом/пользователь/папка/dir3

def returnold(): 
    for root, dirnames, filenames in os.walk(imagedir): 
     for filename in fnmatch.filter(filenames, '*.jpg, *.png'): 
      matches.append(os.path.join(root, filename)) 
    return sorted(matches, key=lambda p: os.path.getctime(os.path.join(user_dir, p))) 

imagedir = /home/user/folder 
filelist = returnold() 

Честно говоря, моя цель здесь обработать все файлы в домашней/пользователь/папки, самого старого файла в первую очередь. Вместо того, чтобы обрабатывать все файлы в каталоге dir1/first, тогда dir2/next, мне нужно сначала обработать старейший файл, независимо от того, где он существует в этой древовидной структуре. Моя мысль заключалась в том, что я мог бы написать список while, а не пустой цикл для обработки всех файлов. Если есть лучший способ, я бы хотел учиться. Оцените любую помощь, которую вы можете добавить здесь.

+0

Как его сортировать? Не похоже, что есть ошибка (но я никогда не слышал о 'fnmatch' раньше). – mr2ert

+1

'ctime' не время создания. Это время последнего изменения индексного дескриптора. К сожалению, нет надежного способа получить фактический возраст файла, но вы можете использовать 'mtime', чтобы получить возраст файла с момента последней модификации *. – kojiro

+0

спасибо kojiro, что помогло! –

ответ

2

Я думаю, что я понял это ..

import os 
import fnmatch 

def returnold(folder): 
    matches = [] 
    for root, dirnames, filenames in os.walk(folder): 
     for filename in fnmatch.filter(filenames, '*.*'): 
      matches.append(os.path.join(root, filename)) 
    return sorted(matches, key=os.path.getmtime) 

nextimage = returnold('/path/to/folder') 

Это возвращает отсортированный список по дате изменения файла, NEXTIMAGE [0] является самым старым, Nextimage [-1] является новым. Кроме того, если вы просто хотите вернуть самый старый файл (а не отсортированный список), вы можете просто вернуть минимальный список, например:

def returnold(folder): 
    matches = [] 
    for root, dirnames, filenames in os.walk(folder): 
     for filename in fnmatch.filter(filenames, '*.*'): 
      matches.append(os.path.join(root, filename)) 
    return min(matches, key=os.path.getmtime) 


nextimage = returnold('/path/to/folder') 
Смежные вопросы