如何用Python统计目录中.txt和.csv两种扩展名的文件数量?
嘿,刚好我之前也遇到过类似的需求,其实只要在你单一扩展名统计的基础上做一点点扩展就搞定了!我给你分享两种常用的实现方式,你可以根据自己的习惯选:
方法一:使用
os模块(兼容旧版Python) 如果你之前用的是os模块统计单一扩展名,那只要把“判断是否等于某个扩展名”改成“判断是否在目标扩展名列表里”就行:
import os def count_target_files(dir_path, target_extensions): count = 0 # 遍历目录下的所有条目 for filename in os.listdir(dir_path): # 跳过目录,只统计文件 if os.path.isfile(os.path.join(dir_path, filename)): # 获取文件扩展名,splitext会返回(文件名, 扩展名),比如"test.txt"会得到("test", ".txt") file_ext = os.path.splitext(filename)[1].lower() # 转小写兼容.TXT这类大写扩展名 if file_ext in target_extensions: count += 1 return count # 调用示例 target_dir = "./your_directory" # 替换成你的目标目录路径 extensions = [".txt", ".csv"] # 要统计的扩展名,注意带点 total = count_target_files(target_dir, extensions) print(f".txt和.csv文件总数:{total}")
小补充:递归统计子目录里的文件
如果你的目录还有子文件夹,想要把里面的目标文件也统计进去,可以用os.walk:
import os def count_target_files_recursive(dir_path, target_extensions): count = 0 for root, dirs, files in os.walk(dir_path): for filename in files: file_ext = os.path.splitext(filename)[1].lower() if file_ext in target_extensions: count += 1 return count # 调用方式和上面一致
方法二:使用
pathlib模块(Python3.4+ 推荐) pathlib是Python3.4之后引入的现代文件路径处理模块,代码更简洁易读:
from pathlib import Path def count_target_files(dir_path, target_extensions): # 统一转小写,方便判断 target_extensions = [ext.lower() for ext in target_extensions] count = 0 # 遍历目录下的所有文件(不包含子目录) for file in Path(dir_path).iterdir(): if file.is_file(): # file.suffix直接获取文件扩展名,比如".txt" if file.suffix.lower() in target_extensions: count += 1 return count # 调用示例 target_dir = "./your_directory" extensions = [".txt", ".csv"] total = count_target_files(target_dir, extensions) print(f".txt和.csv文件总数:{total}")
递归统计子目录的简化写法
用rglob可以一行搞定递归统计,特别适合快速实现需求:
from pathlib import Path target_dir = "./your_directory" # rglob递归匹配所有子目录里的文件,"*.txt"和"*.csv"是通配符 txt_count = len(list(Path(target_dir).rglob("*.txt"))) csv_count = len(list(Path(target_dir).rglob("*.csv"))) total = txt_count + csv_count print(f".txt和.csv文件总数:{total}")
如果要忽略大小写(比如匹配.TXT、.CSV),Python3.10+可以加case_sensitive=False参数:
txt_count = len(list(Path(target_dir).rglob("*.txt", case_sensitive=False))) csv_count = len(list(Path(target_dir).rglob("*.csv", case_sensitive=False)))
内容的提问来源于stack exchange,提问作者Bella
相关产品推荐
相关产品推荐

