Python 在每个子目录中查找最新的文件

Python 在每个子目录中查找最新的文件,python,Python,我有一个类似的文件夹结构,需要从每个子目录中提取最新的.jpg: +C:\\myfiles +父目录1 +次曲面1 +somename1.jpg +somename2.jpg + ... +次曲面2 +somename3.jpg +somename4.jpg + ... + ... +parentdir2 +次曲面1 +somename5.jpg +somename6.jpg + ... +次曲面2 +somename7.jpg +somename8.jpg + ... + ... +父目录3

我有一个类似的文件夹结构,需要从每个子目录中提取最新的.jpg:

+C:\\myfiles
+父目录1
+次曲面1
+somename1.jpg
+somename2.jpg
+ ...
+次曲面2
+somename3.jpg
+somename4.jpg
+ ...
+ ...
+parentdir2
+次曲面1
+somename5.jpg
+somename6.jpg
+ ...
+次曲面2
+somename7.jpg
+somename8.jpg
+ ...
+ ...
+父目录3
+次曲面1
+somename9.jpg
+somename10.jpg
+ ...
+次曲面2
+somename11.jpg
+somename12.jpg
+ ...
+ ...
+ ...
我不知道文件夹或文件的任何名称,但我需要访问每个子目录中的最后2.jpg文件

为了简单起见,我们假设需要打印在子目录中创建的最后两个文件

我编写了一个脚本,将搜索给定parentdir中的所有subdir,但实际上我还需要遍历所有parentdir

import os

path = 'C:\\myfiles'
filelist = []

for i in range(len(os.listdir(path))):
    subpath = path + '\\' + os.listdir(path)[i]
    for root, dirs, files in os.walk(subpath):
        for file in os.listdir(subpath):
            filelist.append(os.path.join(root, file))
        sorted_filelist = sorted(filelist, key=os.path.getctime)
        print('the latest jpg file in ' + root + ' is:  ' + sorted_filelist[-1])
        print('the 2nd last jpg file in ' + root + ' is:  ' + sorted_filelist[-2])
    filelist.clear()

尝试使用os.listdir()遍历父目录,然后遍历所有子目录


我想这会满足你的要求。请注意,我按文件的上次修改时间而不是创建时间对文件进行排序,因为我认为这是确定哪些是“最近的”


“last 2”是指按字母顺序排列的文件名、创建日期、修改日期还是什么?我正在查找按创建日期排序的最后2项您可以使用
排序的文件列表[-2:]
。是的,我理解这一点,但我需要访问父目录,而我的代码示例仅访问子目录
import os

parent_dir = 'path/to/parent/dir'
for subdir in os.listdir(parent_dir):
    if not os.path.isdir(subdir):
        continue
    sorted_filelist = sorted(
        [os.path.join(parent_dir, subdir, f) for f in os.listdir(subdir)
        if os.path.splitext(f)[1] == '.jpg'],
        key=os.path.getctime, reverse=True)
    print(sorted_filelist[:2])
import glob
import os

N_MOST_RECENT = 2
path = 'C:\\myfiles'

for entry in os.listdir(path):
    subpath = os.path.join(path, entry)
    if os.path.isdir(subpath):
        for subentry in os.listdir(subpath):
            subentrypath = os.path.abspath(os.path.join(subpath, subentry))
            if os.path.isdir(subentrypath):
                jpg_files = glob.iglob(os.path.join(subentrypath, '*.jpg'))
                sorted_filenames = sorted(jpg_files, key=os.path.getmtime)
                # Create list of filenames of the N most recent files.
                most_recent = [os.path.split(name)[-1] # Extract filename from path.
                                    for name in sorted_filenames[-N_MOST_RECENT:]]
                print(f'{N_MOST_RECENT} most recent .jpg files in "{subentrypath}":\n'
                      f'  {most_recent}')