Ken*_*nly 106
glob的模式规则不是正则表达式.相反,它们遵循标准的Unix路径扩展规则.只有几个特殊字符:两个不同的通配符,并且[来自glob ] 支持字符范围.
所以你可以用模式排除一些文件.
例如_
,要使用glob 排除清单文件(以文件开头),您可以使用:
files = glob.glob('files_path/[!_]*')
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 42
您不能使用该glob
函数排除模式,globs仅允许包含模式.全局语法非常有限(即使一个[!..]
字符类必须与一个字符匹配,因此它是一个不在该类中的每个字符的包含模式).
你必须自己进行过滤; 列表理解通常在这里很好用:
files = [fn for fn in glob('somepath/*.txt')
if not os.path.basename(fn).startswith('eph')]
Run Code Online (Sandbox Code Playgroud)
neu*_*nus 40
您可以扣除套数:
set(glob("*")) - set(glob("eph*"))
Run Code Online (Sandbox Code Playgroud)
游戏迟到,但您也可以将 python 应用于 afilter
的结果glob
:
files = glob.iglob('your_path_here')
files_i_care_about = filter(lambda x: not x.startswith("eph"), files)
Run Code Online (Sandbox Code Playgroud)
或用适当的正则表达式搜索等替换 lambda...
编辑:我刚刚意识到,如果您使用完整路径startswith
将无法工作,因此您需要一个正则表达式
In [10]: a
Out[10]: ['/some/path/foo', 'some/path/bar', 'some/path/eph_thing']
In [11]: filter(lambda x: not re.search('/eph', x), a)
Out[11]: ['/some/path/foo', 'some/path/bar']
Run Code Online (Sandbox Code Playgroud)
小智 8
相比之下glob
,我推荐pathlib
。过滤一种模式非常简单。
from pathlib import Path
p = Path(YOUR_PATH)
filtered = [x for x in p.glob("**/*") if not x.name.startswith("eph")]
Run Code Online (Sandbox Code Playgroud)
如果你想过滤一个更复杂的模式,你可以定义一个函数来做到这一点,就像:
def not_in_pattern(x):
return (not x.name.startswith("eph")) and not x.name.startswith("epi")
filtered = [x for x in p.glob("**/*") if not_in_pattern(x)]
Run Code Online (Sandbox Code Playgroud)
使用该代码,您可以过滤所有eph
以epi
.
在遍历文件夹中的所有文件时跳过特定文件怎么样!下面的代码将跳过所有以“eph”开头的excel文件
import glob
import re
for file in glob.glob('*.xlsx'):
if re.match('eph.*\.xlsx',file):
continue
else:
#do your stuff here
print(file)
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以使用更复杂的正则表达式模式来包含/排除文件夹中的特定文件集。
归档时间: |
|
查看次数: |
56793 次 |
最近记录: |