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




