Python 使用glob排除时间序列文件 < >我在目录中的文件是每月数年的数据,在每个文件名的中间有诸如01-1-01-01,001-02-01,…,005-01-01,…,010-1201(YYYY MM DD)的字符。

Python 使用glob排除时间序列文件 < >我在目录中的文件是每月数年的数据,在每个文件名的中间有诸如01-1-01-01,001-02-01,…,005-01-01,…,010-1201(YYYY MM DD)的字符。,python,glob,Python,Glob,现在,我想排除0001*文件。 如果我写了sorted(glob.glob(mydirectory/filename-000[!1]*))只会给我0002~~0009个文件,而0010个文件不包括在内 我应该怎么做才能只排除0001*文件 如果我写的排序(glob.glob(mydirectory/filename-000[2-9]*)也只给我0002-0009个文件,我应该怎么做才能包含0010*个文件 我还尝试了filename-{000[2-9],00[10-12]}*,但不起作用 谢谢,

现在,我想排除0001*文件。 如果我写了
sorted(glob.glob(mydirectory/filename-000[!1]*))
只会给我0002~~0009个文件,而0010个文件不包括在内

我应该怎么做才能只排除0001*文件

如果我写的
排序(glob.glob(mydirectory/filename-000[2-9]*)
也只给我0002-0009个文件,我应该怎么做才能包含0010*个文件

我还尝试了
filename-{000[2-9],00[10-12]}*
,但不起作用


谢谢,

把两个地球仪加在一起就行了

files=glob.glob(mydirectory/filename-000[!1]*)+glob.glob(mydirectory/filename-0010*)
像这样做

import glob
from pprint import pprint

pprint(sorted(glob.glob("filename-???[!1]*")))

其中
是“任意字符”,就像
*
是“任意字符串”

对我来说,这很有效

(stackoverflow)  ~/PycharmProjects/stackoverflow  ls -la filename-00*
-rw-r--r--  1 dude  staff  0 Dec 11 23:31 filename-0001
-rw-r--r--  1 dude  staff  0 Dec 11 23:31 filename-0002
-rw-r--r--  1 dude  staff  0 Dec 11 23:31 filename-0003
-rw-r--r--  1 dude  staff  0 Dec 11 23:31 filename-0004
-rw-r--r--  1 dude  staff  0 Dec 11 23:31 filename-0005
-rw-r--r--  1 dude  staff  0 Dec 11 23:31 filename-0006
-rw-r--r--  1 dude  staff  0 Dec 11 23:31 filename-0007
-rw-r--r--  1 dude  staff  0 Dec 11 23:31 filename-0008
-rw-r--r--  1 dude  staff  0 Dec 11 23:31 filename-0009
-rw-r--r--  1 dude  staff  0 Dec 11 23:31 filename-0010
(stackoverflow)  ~/PycharmProjects/stackoverflow # python test123.py
['filename-0002',
 'filename-0003',
 'filename-0004',
 'filename-0005',
 'filename-0006',
 'filename-0007',
 'filename-0008',
 'filename-0009',
 'filename-0010']
(stackoverflow)  ~/PycharmProjects/stackoverflow #

glob
支持Unix shell模式规则,但不支持更复杂的表达式。但是,在使用Python时,可以使用很多过滤技术,包括正则表达式。如果我的目录如下所示:

$ find
.
./mydirectory
./mydirectory/filename-0001-01-01
./mydirectory/filename-0001-02-01
./mydirectory/filename-0010-12-01
./mydirectory/filename-0005-01-01

然后

将返回:

['mydirectory/filename-0010-12-01', 'mydirectory/filename-0005-01-01']

这将在

中进一步解释您好,非常感谢您的解决方案!但是,这个方法???[!1]*也将删除0011文件。哦,你是对的:(所以我认为你不能在一个全局调用中完成它。我认为这是一种更方便、更灵活的方式。谢谢!我以前不知道这个简单的+。没问题。记得将问题标记为已回答(小复选标记)。
['mydirectory/filename-0010-12-01', 'mydirectory/filename-0005-01-01']