Python使用glob递归遍历含点子目录时无法获取内部文件问题
解决glob匹配带点目录时误将目录当作文件返回的问题
你遇到的问题根源在于glob.glob的*.*匹配规则——它会匹配任何名称中包含点的对象,包括名称带点的子目录。加上recursive=True后,**会遍历所有层级的子目录,所以那些带点的子目录会被当成符合*.*条件的结果返回,而非只返回目录内的文件。另外你代码里的路径写法也有问题:'c:\test\ID_1'+/**/*.*'存在语法错误,而且\t会被解析为制表符,导致路径无效。
方法一:用os.walk精准遍历所有文件
os.walk会明确区分目录和文件,直接遍历收集所有文件路径,完全不会受目录名带点的影响:
import os # 用原始字符串避免转义问题 root_dir = r'c:\test\ID_1' listaFile = [] for root, _, files in os.walk(root_dir): for file in files: listaFile.append(os.path.join(root, file))
方法二:glob结果后过滤目录
如果偏好使用glob,可以在获取结果后用os.path.isfile过滤掉目录,只保留文件:
import glob import os # 注意用原始字符串写路径,避免转义错误 listaFile = [ file_path for file_path in glob.glob(r'c:\test\ID_1\**\*.*', recursive=True) if os.path.isfile(file_path) ]
方法三:用glob.iglob边遍历边过滤(节省内存)
如果目录下文件很多,用glob.iglob迭代遍历,边遍历边过滤,避免一次性加载所有路径到内存:
import glob import os listaFile = [] for path in glob.iglob(r'c:\test\ID_1\**\*', recursive=True): if os.path.isfile(path): listaFile.append(path)
内容的提问来源于stack exchange,提问作者alex_T
相关产品推荐
相关产品推荐

