我有这个密码:
import glob, os
outdir = './output/'
nstring = 'testdat_2014-12-31'
nfilelist = sorted(glob.glob((outdir+'/*{}*.nc').format(nstring)))
我从中得到nfilelist
:
['testdat_2014-12-31-21_H1.nc',
'testdat_2014-12-31-21_H10.nc',
'testdat_2014-12-31-21_H11.nc',
'testdat_2014-12-31-21_H12.nc',
'testdat_2014-12-31-21_H2.nc',
'testdat_2014-12-31-21_H3.nc',
'testdat_2014-12-31-21_H4.nc',
'testdat_2014-12-31-21_H5.nc',
'testdat_2014-12-31-21_H6.nc',
'testdat_2014-12-31-21_H7.nc',
'testdat_2014-12-31-21_H8.nc',
'testdat_2014-12-31-21_H9.nc']
最后的H1-H12数字反映了我想要如何排序。但现在,H10-H12被夹在中间。如何从H1-H12排序?你知道吗
正则表达式不是我的强项,我无法前进。你知道吗
我试着分开走了这么远:
nfilelist[0].split('_')[-1].split('.')
['H1', 'nc']
您排序的名称具有简单而规则的结构;您可以在不调用regex的情况下生存。将名称的第一部分置于“\u H”之后,然后将其第一部分置于“.”之前,然后将结果转换为整数,从而对名称进行排序:
假设希望它们按int value排序,则可以按以下方式使用regex:
输出
解释
模式
'H(\d+)\.nc'
表示匹配任何一组数字(\d+)
,前面是H
,后面是.nc
。并使用.group(1)
获得数字组。然后将这些数字组转换成int
,并将它们用作排序的键。你知道吗无正则表达式
如果要完全避免regex,请使用以下函数作为键:
注意
最后,如果要按字符串值排序,只需删除对int函数的调用。你知道吗
不用正则表达式就可以实现这一点
这个键首先将这些文件名与
与其他答案的速度比较:
在2.7 GHz Intel Core i7上运行的iPython3.7中使用
%timeit
获得计时相关问题 更多 >
编程相关推荐