Python 在每个子目录中查找最新的文件
我有一个类似的文件夹结构,需要从每个子目录中提取最新的.jpg: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
+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}')