4

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

这是我到目前为止所拥有的,但它不是按日期排序的......

例如:/home/user/folder/dir1 /home/user/folder/dir2 /home/user/folder/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/folder 下的所有文件,首先处理最旧的文件。我需要先处理最旧的文件,而不是先处理 dir1/ 中的所有文件,然后再处理 dir2/ 中的所有文件,而不管它存在于该树结构中的什么位置。我的想法是我可以写一个 while list is not empty loop 来处理所有文件。如果有更好的方法,我很想学习。感谢您可以在此处添加的任何帮助。

4

1 回答 1

4

我想我想通了。。

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')
于 2013-09-21T01:30:17.803 回答