在 Python 中使用 glob 查找具有非连续数字的路径名
Finding path names with non-consecutive numbers using glob in Python
有没有办法找到编号不连续的文件名?更具体地说,我希望列出包含这些数字的文件名:
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
中的文件,我不想要这些文件。有什么建议吗?
您可以在结果表单 os.listdir 上使用正则表达式检查重复数字。我在与脚本相同的目录中制作了一个示例文件,它有重复的数字。使用第一种方法 returns 一个空列表。删除列表理解中的 'not' returns 有问题的文件名。
import os
import re
files = [f for f in os.listdir(path) if not re.search(r'(\d)+\b', f)]
print(files)
[]
删除 'not' 以查找重复号码:
files = [f for f in os.listdir(path) if re.search(r'(\d)+\b', f)]
print(files)
['s201911.txt']
你不能用一个 glob 来做到这一点 - 语言不够复杂 - 但你可以用两个来做到这一点:
glob.glob(path +'*.s201[7-9]0[1-2]*.nc') + glob.glob(path +'*.s201[7-9]12*.nc')
有没有办法找到编号不连续的文件名?更具体地说,我希望列出包含这些数字的文件名:
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
中的文件,我不想要这些文件。有什么建议吗?
您可以在结果表单 os.listdir 上使用正则表达式检查重复数字。我在与脚本相同的目录中制作了一个示例文件,它有重复的数字。使用第一种方法 returns 一个空列表。删除列表理解中的 'not' returns 有问题的文件名。
import os
import re
files = [f for f in os.listdir(path) if not re.search(r'(\d)+\b', f)]
print(files)
[]
删除 'not' 以查找重复号码:
files = [f for f in os.listdir(path) if re.search(r'(\d)+\b', f)]
print(files)
['s201911.txt']
你不能用一个 glob 来做到这一点 - 语言不够复杂 - 但你可以用两个来做到这一点:
glob.glob(path +'*.s201[7-9]0[1-2]*.nc') + glob.glob(path +'*.s201[7-9]12*.nc')