擅长:python、mysql、java
<p>如果您的目录结构良好且不太大,我建议您立即获取所有文件的路径并对其进行排序:</p>
<pre><code>#get all file with path
all_files_path = []
for path, subdirs, files in os.walk(directory):
for f in files:
all_files_path.append(os.path.join(path, f))
# define custom sort key function
def which_items_you_want_to_compare(fpath):
#from buran's answer for sorting the part of file name
def parse(fname):
prefix, *middle, n1, n2 = fname.split('_')
return (prefix, n1, n2, ''.join(middle))
fpath_split = fpath.split(os.path.sep)
fn = fpath_split[-1] # file name 'feed_restr_013_01.zip'
sort_key_fn = parse(fn) # from buran's answer
d_ym = fpath_split[-2] # dir '202101'
d_y = fpath_split[-3] # dir '2021'
#compare with year first, then month (last two words in d_ym), then file name sort from buran's answer
return (int(d_y), int(d_ym[4:])) + sort_key_fn
sorted_res = sorted(all_files_path, key=which_items_you_want_to_compare, reverse=True)
</code></pre>
<p>如果您不想按反向排序年份,可以在键函数中使用<code>-int(d_y)</code>等将其反向排序</p>