如何在Python中使用glob指定目录获取Excel文件?
问题分析与解决方案
嘿,我来帮你排查问题啦!你的代码返回空列表的核心原因是路径拼接时漏掉了目录分隔符。
Windows系统中目录路径用\分隔,而你直接写direc + "*.xls*"会把目录名和文件模式硬连在一起,生成类似C:\path\to\dir1*.xls*的错误路径——这个路径里的dir1和*.xls*没有分隔开,glob根本找不到匹配的文件。
下面给你几种靠谱的解决方法:
方法1:用os.path.join自动拼接路径(推荐跨平台)
os.path.join会根据当前操作系统自动选择正确的路径分隔符,不管是Windows的\还是Linux/macOS的/都能兼容,避免手动拼接出错:
import glob import os dirs = ['C:\\path\\to\\dir1','C:\\path\\to\\dir2','C:\\path\\to\\dir3'] for direc in dirs: # 用os.path.join拼接目录和文件模式 file_pattern = os.path.join(direc, "*.xls*") excel_files = glob.glob(file_pattern) print(f"目录 {direc} 下的Excel文件:", excel_files)
方法2:手动添加路径分隔符(仅适用于Windows)
如果你确定只在Windows环境运行,可以手动给目录路径加上转义后的\\分隔符:
import glob dirs = ['C:\\path\\to\\dir1','C:\\path\\to\\dir2','C:\\path\\to\\dir3'] for direc in dirs: excel_files = glob.glob(direc + "\\*.xls*") print(f"目录 {direc} 下的Excel文件:", excel_files)
方法3:用pathlib(Python 3.4+ 现代写法)
pathlib是Python 3.4引入的面向对象路径处理模块,代码更简洁易读:
from pathlib import Path dirs = ['C:\\path\\to\\dir1','C:\\path\\to\\dir2','C:\\path\\to\\dir3'] for direc in dirs: dir_path = Path(direc) # 获取所有xls/xlsx文件,返回Path对象列表 excel_files = list(dir_path.glob("*.xls*")) # 如果需要字符串格式的路径,可转换 excel_files_str = [str(file) for file in excel_files] print(f"目录 {direc} 下的Excel文件:", excel_files_str)
内容的提问来源于stack exchange,提问作者PyRsquared
相关产品推荐
相关产品推荐

