Python中如何让os.path.exists忽略大小写检查路径是否存在?
实现忽略大小写的路径存在检查
我明白你遇到的问题——有时候文件名的大小写乱七八糟,直接用os.path.exists()会因为大小写不匹配返回False,挺烦人的。因为Python的os.path.exists()本身不支持忽略大小写的检查,所以我们需要自己实现一个对应的函数来处理这个需求。
第一步:编写忽略大小写的存在检查函数
这个函数的核心思路是:拆分目标路径的目录和文件名,遍历目录下的所有条目,将每个条目名和目标文件名统一转成小写(或大写)进行比较,只要有匹配的就说明路径存在。
import os def case_insensitive_exists(target_path): # 拆分路径的目录部分和文件名部分 dir_path, filename = os.path.split(target_path) # 如果目标路径本身是目录(无文件名),直接检查目录是否存在 if not filename: return os.path.exists(dir_path) # 如果目录本身不存在,直接返回False if not os.path.isdir(dir_path): return False # 遍历目录下的所有条目,统一大小写后比较 for entry in os.listdir(dir_path): if entry.lower() == filename.lower(): return True return False
第二步:修改你的原有代码
把原来的os.path.exists()替换成我们刚写的case_insensitive_exists()函数,同时建议用os.path.join()来拼接路径(比手动加\更跨平台,避免路径分隔符的兼容性问题)。修改后的代码如下:
import os # 先定义上面的case_insensitive_exists函数 INI_NAME = (cfgname.split("_", 1)[1]) + ".ini" # 用os.path.join规范拼接路径 newpath = os.path.join(newpath, cfgname) if case_insensitive_exists(newpath): INI_path = os.path.join(self.ECUFolderpath, INI_NAME) if case_insensitive_exists(INI_path): print("文件存在") # 替换你原来的print(exist),建议写明确的提示信息
补充说明
- 这个函数跨平台兼容:不管是Windows(本身大小写不敏感)还是Linux/macOS(大小写敏感),都能正确忽略大小写检查路径是否存在。
- 支持目录检查:如果目标路径是一个目录,函数也能正确判断该目录是否存在(忽略目录名的大小写)。
内容的提问来源于stack exchange,提问作者jack




