2016-06-13 76 views
4

有没有简单的方法来排序python目录中的文件?我心目中的文件有一个排序为如何使用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 

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

+0

文件没有订单,其中t嘿被放置。它们按您选择的文件浏览器按特定值进行排序,如名称,文件大小,添加的日期等。因此,您不能对文件“做些什么”并将它们排序在您的目录中。 –

回答

7

如前所述,目录中的文件不是以特定方式固有排序的。因此,我们通常1)抓取文件名2)按期望的属性排序文件名3)按排序顺序处理文件。

您可以按如下方式获取目录中的文件名。假设该目录为 “〜/家”,然后

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 
相关问题