如何使用python按特定顺序对文件名进行排序

时间:2016-06-13 18:17:35

标签: python sorting python-3.x io

有没有一种简单的方法来对python中的目录中的文件进行排序?我想到的文件排序为

file_01_001
file_01_005
...
file_02_002
file_02_006
...
file_03_003
file_03_007
...
file_04_004
file_04_008

我想要的是像

file_01_001
file_02_002
file_03_003
file_04_004
file_01_005
file_02_006
...

我目前正在使用glob为目录打开它们,如下所示:

for filename in glob(path):    
    with open(filename,'rb') as thefile:
        #Do stuff to each file

因此,当程序执行所需的任务时,如果我一次执行多个文件,由于文件的排序,它会提供不正确的数据。有什么想法吗?

2 个答案:

答案 0 :(得分:8)

如上所述,目录中的文件本身并不以特定方式排序。因此,我们通常1)获取文件名2)按所需属性对文件名进行排序3)按排序顺序处理文件。

您可以按如下方式获取目录中的文件名。假设目录是“〜/ home”,那么

import os

file_list = os.listdir("~/home")

排序文件名:

#grab last 4 characters of the file name:
def last_4chars(x):
    return(x[-4:])

sorted(file_list, key = last_4chars)   

所以看起来如下:

In [4]: sorted(file_list, key = last_4chars)
Out[4]:
['file_01_001',
 'file_02_002',
 'file_03_003',
 'file_04_004',
 'file_01_005',
 'file_02_006',
 'file_03_007',
 'file_04_008']

要按排序顺序读入并处理它们,请执行以下操作:

file_list = os.listdir("~/home")

for filename in sorted(file_list, key = last_4chars):    
    with open(filename,'rb') as thefile:
        #Do stuff to each file

答案 1 :(得分:0)

更好的解决方案是使用Tcl的“ lsort -dictionary”:

from tkinter import Tcl
Tcl().call('lsort', '-dict', file_list)

Tcl字典排序将正确处理数字,并且您将获得与文件管理器用于排序文件的结果类似的结果。