创建一个递归排序的文件列表(最早的文件)

时间:2013-09-21 00:00:44

标签: python python-2.7

我正在尝试从目录创建一个递归的文件列表,然后根据年龄对它们进行排序。我真的不太关心文件扩展,只关注最旧的文件。

这是我目前所拥有的,但它没有按日期排序......

例如:     / home / user中/文件夹/ DIR1     / home / user中/文件夹/ 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()

老实说,我的目标是首先处理home / user /文件夹下的所有文件,最旧的文件。而不是处理dir1 / first中的所有文件,然后是dir2 / next,我需要先处理最旧的文件,而不管它在树结构中的位置。我的想法是我可以写一个while列表不是空循环来处理所有文件。如果有更好的方法,我很乐意学习。感谢您在这里添加的任何帮助。

1 个答案:

答案 0 :(得分:3)

我想我想出来了..

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')