You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python 2.7如何检测文件夹中是否存在含指定字符串的文件

检测含特定字符串的文件是否存在

我来帮你解决这个问题——你说得没错,os.path.exists()确实只能检查完整路径是否存在,不支持通配符或者包含匹配。下面给你两种用Python标准库就能实现的方案,都是最常用且无需额外安装依赖的:

方案1:使用os模块遍历检查

这是最基础的实现方式,通过遍历文件夹内的所有文件,逐个判断文件名是否包含目标字符串:

import os

def has_file_containing_string(folder_path, target_str):
    # 遍历目标文件夹中的所有条目
    for filename in os.listdir(folder_path):
        # 拼接完整文件路径,确保是文件而非文件夹,同时检查文件名包含目标字符串
        full_path = os.path.join(folder_path, filename)
        if os.path.isfile(full_path) and target_str in filename:
            return True
    # 遍历结束未找到匹配文件,返回False
    return False

# 测试示例:检查当前目录下是否存在含"dan"的文件
print(has_file_containing_string('.', 'dan'))  # 针对你的示例文件夹,会返回True

代码说明

  • os.listdir(folder_path) 获取目标文件夹下的所有文件名和文件夹名
  • os.path.isfile(full_path) 确保我们只检查文件(排除文件夹)
  • 一旦找到第一个匹配的文件就立即返回True,不用遍历全部文件,效率较高

方案2:使用glob模块快速匹配

如果你想更简洁地实现,可以用glob模块,它原生支持文件名通配符匹配:

import glob

def has_file_containing_string(target_str):
    # 匹配当前目录下所有文件名包含target_str的文件
    matching_files = glob.glob(f'./*{target_str}*')
    # 只要匹配到至少一个文件,就返回True
    return len(matching_files) > 0

# 测试示例
print(has_file_containing_string('dan'))  # 针对你的示例文件夹,会返回True

代码说明

  • glob.glob(f'./*{target_str}*') 会返回所有符合*target_str*模式的文件路径列表,*代表任意长度的任意字符
  • 这种写法更简洁,不需要手动遍历,glob会帮我们完成匹配逻辑

为什么你之前的尝试失败?

os.path.exists()的设计是检查具体的单个路径是否存在,它不会解析通配符(比如./dan*或者./*dan),这些字符串会被当作完整的文件名来查找,而你的文件夹里并没有叫dan**dan的文件,所以会返回False

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

火山引擎 最新活动