如何将 glob 与跳过列表一起使用
How to use glob with a skip list
我正在尝试使用 glob.glob 读取一系列目录中具有相同名称的文件,但我想跳过某些特定目录。
我的目录名称类似于 trj0001,..,trj0099,我想跳过它们的列表,例如:list = [trj0005, trj0009, trj0011, trj0056, trj0083]。
我目前正在使用这条线:
files = glob.glob(r'my_dir/trj_00*/file.txt')
如有任何提示,我们将不胜感激。
在使用 glob
时没有简单的方法可以跳过某些文件,除非您想匹配除匹配某种模式的文件之外的所有文件。
因此您可以使用 filter
明确跳过它
exclude_list = [trj0005, trj0009, trj0011, trj0056, trj0083]
files = filter(lambda path: not any(e in path for e in exclude_list), glob.glob(r'my_dir/trj_00*'))
我建议您使用 glob
过滤列表 after,使用列表理解,它非常可读,如下所示:
import glob
files = glob.glob(r'my_dir/trj_00*/file.txt')
blackList = ['trj0005', 'trj0009', 'trj0011', 'trj0056', 'trj0083']
files = [f for f in files if all(bl not in f for bl in blackList)]
print(files)
我正在尝试使用 glob.glob 读取一系列目录中具有相同名称的文件,但我想跳过某些特定目录。 我的目录名称类似于 trj0001,..,trj0099,我想跳过它们的列表,例如:list = [trj0005, trj0009, trj0011, trj0056, trj0083]。
我目前正在使用这条线:
files = glob.glob(r'my_dir/trj_00*/file.txt')
如有任何提示,我们将不胜感激。
在使用 glob
时没有简单的方法可以跳过某些文件,除非您想匹配除匹配某种模式的文件之外的所有文件。
因此您可以使用 filter
exclude_list = [trj0005, trj0009, trj0011, trj0056, trj0083]
files = filter(lambda path: not any(e in path for e in exclude_list), glob.glob(r'my_dir/trj_00*'))
我建议您使用 glob
过滤列表 after,使用列表理解,它非常可读,如下所示:
import glob
files = glob.glob(r'my_dir/trj_00*/file.txt')
blackList = ['trj0005', 'trj0009', 'trj0011', 'trj0056', 'trj0083']
files = [f for f in files if all(bl not in f for bl in blackList)]
print(files)