Python如何遍历筛选文件夹中文件名仅为数字的csv文件
实现方案
核心思路是先拆分文件名,分别校验后缀是否为csv、不带后缀的文件名主体是否完全由数字组成,以下是两种常用实现方式:
方法1:使用os模块实现
import os file_list = ['123.csv', 'not.csv', '75839.csv', '2.csv', 'bad.csv', '23bad8.csv'] target_files = [] for f in file_list: # 拆分得到文件名主体、后缀 name_stem, suffix = os.path.splitext(f) # 同时满足后缀为csv、主体全为数字两个条件 if suffix.lower() == '.csv' and name_stem.isdigit(): target_files.append(f) # 此处添加你的文件处理逻辑
如果需要更简洁的写法,可以用列表推导式:
target_files = [f for f in file_list if os.path.splitext(f)[1].lower() == '.csv' and os.path.splitext(f)[0].isdigit()]
方法2:使用pathlib实现(更直观)
适合需要直接遍历指定文件夹的场景:
from pathlib import Path # 替换为你的目标文件夹路径 dir_path = Path("./target_folder") target_files = [] for file in dir_path.iterdir(): # stem对应不带后缀的文件名,suffix对应后缀 if file.suffix.lower() == '.csv' and file.stem.isdigit(): target_files.append(file.name) # 此处添加你的文件处理逻辑
逻辑说明
str.isdigit()是Python字符串内置方法,会判断字符串的所有字符是否都是数字,只要存在非数字字符就会返回False,刚好匹配你的需求- 代码中加了
suffix.lower()是为了兼容.CSV大写后缀的特殊情况,如果你的场景里所有csv后缀都是小写,可以去掉.lower() - 针对示例输入的文件列表,以上两种方法筛选出的结果都是
['123.csv', '75839.csv', '2.csv'],完全符合预期
如果你的场景存在文件名带负号、小数点等特殊数字格式的需求,可以改用正则匹配替换isdigit()判断,示例如下:
import re # 匹配整数(支持负号)的正则 if re.fullmatch(r'-?\d+', name_stem): # 符合条件
内容的提问来源于stack exchange,提问作者Gony
相关产品推荐
相关产品推荐

