使用Python中的glob查找具有非连续数字的路径名

问题描述 投票:2回答:2

有没有办法找到数字不连续的文件名?更具体地说,我希望列出包含以下数字的文件名:

path +'*.s201701*.nc'
path +'*.s201801*.nc'
path +'*.s201901*.nc'
path +'*.s201702*.nc'
path +'*.s201802*.nc'
path +'*.s201902*.nc'
path +'*.s201712*.nc'
path +'*.s201812*.nc'
path +'*.s201912*.nc' 

我可以在'2017'到'2019'进行更改,因为数字是连续的,但不是'01','02','12',因为它们不是。这不起作用:

glob.glob(path +'*.s201[7-9][01,02,12]*.nc'

这有效,

glob.glob(path +'*.s201[7-9][0-1][1-2]*.nc'

但也给了我s201*11*.nc的文件,我不想要。有小费吗?

python python-3.x filepath glob pathname
2个回答
1
投票

你不能用一个glob做这个 - 语言不够复杂 - 但你可以用两个:

glob.glob(path +'*.s201[7-9]0[1-2]*.nc') + glob.glob(path +'*.s201[7-9]12*.nc')

0
投票

您可以在结果表单os.listdir上使用正则表达式检查重复数字。我在脚本所在的目录中创建了一个示例文件,它有重复的数字。使用第一种方法返回一个空列表。删除列表解析中的“not”将返回有问题的文件名。

import os
import re

files = [f for f in os.listdir(path) if not re.search(r'(\d)\1+\b', f)]

print(files)
[]

删除'not'以查找重复数字:

files = [f for f in os.listdir(path) if re.search(r'(\d)\1+\b', f)]
print(files)
['s201911.txt']
© www.soinside.com 2019 - 2024. All rights reserved.