Python读取CFG配置后glob无法匹配目标文件问题求助
解决glob读取CFG配置后无法匹配文件的问题
嘿,我一眼就瞅出问题所在了——你读取CFG文件时没处理掉隐藏的换行符和多余引号,导致glob拿到的路径完全不符合要求,自然找不到文件!
咱们拆解下问题根源:
- 用
read()读取cfg文件时,文件末尾的换行符\n会被一并读入,比如config.cfg里的C:/test,实际读出来是C:/test\n filetype.cfg里的内容带双引号,读出来是"**/*.jpg"(甚至可能还带换行),拼接后路径变成C:/test\n"**/*.jpg",这显然不是合法的搜索路径,glob当然匹配不到任何文件
下面是修正后的代码,我还加了更稳妥的路径处理逻辑:
import glob import os # 用with语句管理文件,自动关闭更安全靠谱 with open("config.cfg", encoding='cp1252') as loc_file: # strip()去掉换行、首尾空格等多余字符,确保路径干净 location = loc_file.read().strip() with open("filetype.cfg", encoding='cp1252') as type_file: # 先清理空白字符,再去掉首尾的双引号 filetype = type_file.read().strip().strip('"') # 用os.path.join适配Windows路径分隔符,避免手动拼接出错 # 兼容filetype的两种写法:不管是**/*.jpg还是*.jpg,都能生成正确的搜索模式 search_pattern = os.path.join(location, "**", filetype.lstrip("**/")) fileset = glob.glob(search_pattern, recursive=True) print(f"目标路径:{location}") print(f"文件类型:{filetype}") for file in fileset: print(file)
为什么这么改?
- 清理读取内容:
strip()能彻底干掉文件读取时带入的换行符、空格,确保路径是干净的C:/test而非C:/test\n - 移除多余引号:
strip('"')把filetype里的双引号去掉,让它变成符合glob语法的**/*.jpg或*.jpg - 安全拼接路径:用
os.path.join代替手动加号拼接,它会自动适配Windows的\分隔符,避免跨平台问题(哪怕现在用Windows,好习惯也要保持) - 兼容不同配置写法:不管你的cfg里写的是
**/*.jpg还是*.jpg,lstrip("**/")都能处理成合适的后缀,和location/**拼接成正确的搜索模式
你可以先打印下修正后的location和filetype,会发现它们和参考代码里硬编码的内容完全一致,这样glob就能正常匹配文件了!
内容的提问来源于stack exchange,提问作者Charles Manson
相关产品推荐
相关产品推荐

