如何在指定目录下查找所有*.txt文件?现有代码返回空数组
问题排查与修复方案
咱们先拆解下你这段代码为啥返回空列表:
- 匹配逻辑完全错了:
lambda f: f == '*.txt'是在找文件名**精确等于*.txt**的文件,而不是匹配所有.txt后缀的文件——除非你真的有个文件就叫*.txt,不然肯定找不到任何结果。 - 变量命名有点混乱:明明要找txt文件,却用了
mp3files这个变量名,而且file是Python的内置类型,拿来当变量名容易踩坑,建议换个名字。 - 另外,
"my directory: example"这个路径看起来是占位符,实际运行时记得换成你真实的目录路径(比如"./test_dir"或者绝对路径"/home/user/my_files")。
下面给你几种靠谱的实现方式,按需选择:
方法1:用glob模块(最省心,推荐)
你已经导入了glob,它就是专门用来做文件路径匹配的,语法简单还不容易出错:
import glob # 替换成你的目标目录,*.txt 匹配该目录下所有txt文件 txt_files = glob.glob("your_real_directory/*.txt") # 如果需要连子目录里的txt文件一起找,加个recursive=True就行: # txt_files = glob.glob("your_real_directory/**/*.txt", recursive=True) print(txt_files)
方法2:用os.listdir配合endswith
要是你坚持想用os.listdir,可以用字符串的endswith方法来判断后缀,顺便加个判断确保是文件(不是名字带.txt的文件夹):
import os target_dir = "your_real_directory" all_items = os.listdir(target_dir) # 筛选出真正的txt文件 txt_files = [ item for item in all_items if item.endswith(".txt") and os.path.isfile(os.path.join(target_dir, item)) ] print(txt_files)
方法3:用os.walk遍历所有层级
如果需要遍历目标目录下所有子目录里的txt文件,os.walk是个好选择:
import os target_dir = "your_real_directory" txt_files = [] # 遍历目录树 for root, _, files in os.walk(target_dir): for file_name in files: if file_name.endswith(".txt"): # 保存完整路径,要是只需要文件名就改成file_name txt_files.append(os.path.join(root, file_name)) print(txt_files)
总的来说,glob是最适合这个场景的工具,代码少还直观,优先用它就行。
内容的提问来源于stack exchange,提问作者Coldoe
相关产品推荐
相关产品推荐

