Lou*_*Lou 6 python sorting io python-3.x
有没有一种简单的方法来对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
Run Code Online (Sandbox Code Playgroud)
我想要的是类似的东西
file_01_001
file_02_002
file_03_003
file_04_004
file_01_005
file_02_006
...
Run Code Online (Sandbox Code Playgroud)
我目前正在使用glob以下目录打开它们:
for filename in glob(path):
with open(filename,'rb') as thefile:
#Do stuff to each file
Run Code Online (Sandbox Code Playgroud)
因此,当程序执行所需的任务时,如果我一次执行多个文件,由于文件的排序,它会提供不正确的数据.有任何想法吗?
Gen*_*sky 11
如上所述,目录中的文件本身并不以特定方式排序.因此,我们通常1)获取文件名2)按所需属性对文件名进行排序3)按排序顺序处理文件.
您可以按如下方式获取目录中的文件名.假设目录是"〜/ home"
import os
file_list = os.listdir("~/home")
Run Code Online (Sandbox Code Playgroud)
要对文件名进行排序:
#grab last 4 characters of the file name:
def last_4chars(x):
return(x[-4:])
sorted(file_list, key = last_4chars)
Run Code Online (Sandbox Code Playgroud)
所以它看起来如下:
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']
Run Code Online (Sandbox Code Playgroud)
要按排序顺序读入并处理它们,请执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
小智 10
更好的解决方案是使用 Tcl 的“lsort -dictionary”:
from tkinter import Tcl
Tcl().call('lsort', '-dict', file_list)
Run Code Online (Sandbox Code Playgroud)
Tcl 字典排序将正确处理数字,您将获得类似于文件管理器用于排序文件的结果。