Python pathlib:如何从具有表达式匹配的路径中过滤文件?

Python pathlib: How to filter files from path with expression matching?

我想过滤掉目录中包含特定表达式的文件。我对 Python 很陌生。在 R 中,我会使用字符串,但在 Python 中,我使用 pathlib,它具有一些巧妙的优点,例如跨平台兼容性。

例如,我有一个由 WindowsPath 个要过滤的对象组成的列表:

from pathlib import Path
import re, glob

fileDir = Path(r'T:\testdir')
filelist = [img for img in fileDir.iterdir() if img.is_file()]

print(filelist)
[WindowsPath('T:/testdir/T31TGL_20180108T104421_B11.jp2'), WindowsPath('T:/testdir/T31TGL_20180108T104421_B12.jp2'), WindowsPath('T:/testdir/T31TGL_20180108T104421_TCI.jp2')]

所需的输出是文件 T31TGL_20180108T104421_TCI.jp2 的路径。例如。我想为表达式 TCI 过滤 filelist 中包含的文件。

我尝试使用表达式匹配进行过滤,如下所示:

expr = re.compile('.*TCI')
TCI_path = list(filter(expr.match, imglist))

这会引发错误:

TypeError: expected string or bytes-like object

例如不适用于 filelist 的 WindowsPath 对象。我也尝试过 .glob 方法 (https://docs.python.org/3.5/library/glob.html#glob.glob) 但我对 python 太缺乏经验,似乎无法让它工作...

如何相应地过滤此列表?

您可以在匹配之前将您的 WindowsPath 转换为 str

TCI_path = list(item for item in filelist if expr.match(str(item)))

.glob("*TCI*")(或者甚至 .glob("*_TCI.jp2"))也应该有效...