我的目录中的文件是跨越数年的月度数据,在每个文件名的中间有0001-01、0001-02-01、.、0005-01-01、.、0010-12-01 (Yyyy Dd)等字符。
现在,我想不包括0001*文件。如果我写的sorted(glob.glob(mydirectory/filename-000[!1]*))
只给我0002 ~ 0009文件,而0010文件不包括在内。
我应该怎么做才能只排除0001*文件?
如果我写的sorted(glob.glob(mydirectory/filename-000[2-9]*))
也只给我0002-0009文件,我应该做什么来包括0010*文件?
我也尝试过filename-{000[2-9],00[10-12]}*
,它不起作用。
谢谢,
发布于 2019-12-11 23:03:06
glob
支持Unix模式规则,但不支持更复杂的表达式。但是,在使用Python时,可以使用许多筛选技术,包括正则表达式。如果我的目录如下所示:
$ find
.
./mydirectory
./mydirectory/filename-0001-01-01
./mydirectory/filename-0001-02-01
./mydirectory/filename-0010-12-01
./mydirectory/filename-0005-01-01
然后
[f for f in glob.glob(r"mydirectory/filename-*") if "0001" not in f]
将返回:
['mydirectory/filename-0010-12-01', 'mydirectory/filename-0005-01-01']
这将在this SO answer中得到进一步解释。
发布于 2019-12-11 22:32:21
把两个球加在一起。
files = glob.glob(mydirectory/filename-000[!1]*) + glob.glob(mydirectory/filename-0010*)
发布于 2019-12-11 22:34:45
像这样做
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 #
https://stackoverflow.com/questions/59295079
复制相似问题