You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中按多文件夹模式过滤文件路径列表

解决方案

方法一:字符串匹配(简单直接)

通过all()函数逐个校验路径是否不包含目标文件夹列表中的任何项,这是最直接的实现方式:

file_list1 = ['/home/qrs/sample1.csv',
 '/home/abc/sample1.csv',
 '/home/mno/sample13.csv',
 '/home/xyz/sample2.csv']
change_folder = ['mno', 'xyz']

file_list2 = [x for x in file_list1 if all(folder not in x for folder in change_folder)]

逻辑说明:all(...)会遍历change_folder里的每个文件夹名,只有当所有文件夹名都不在当前路径字符串中时,才将该路径纳入结果列表。

方法二:用pathlib处理路径(更严谨)

如果担心文件名中意外包含目标文件夹名导致误过滤(比如存在/home/qrs/mno_sample.csv这类路径),可以用Python标准库pathlib解析路径结构,精准判断文件夹层级:

from pathlib import Path

file_list1 = ['/home/qrs/sample1.csv',
 '/home/abc/sample1.csv',
 '/home/mno/sample13.csv',
 '/home/xyz/sample2.csv']
change_folder = {'mno', 'xyz'}  # 用集合提升查找效率

file_list2 = []
for path_str in file_list1:
    path = Path(path_str)
    # 提取路径中所有父目录的名称
    parent_folders = {parent.name for parent in path.parents}
    # 若目标文件夹集合与父目录无交集,则保留路径
    if not parent_folders & change_folder:
        file_list2.append(path_str)

逻辑说明:path.parents会返回路径的所有父目录层级,提取名称后和目标文件夹集合做交集判断,完全避免了字符串匹配的误判风险。

原代码失效原因

你写的change_folder not in x是在判断整个列表是否是路径字符串的子串,这不符合需求——列表无法直接和字符串做包含校验,必须逐个检查列表中的每个元素是否存在于路径中。

内容的提问来源于stack exchange,提问作者Arani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:01:02