使用Pandas筛选同目录下.xlsx文件时过滤失效该如何解决?
代码存在的问题
- 逻辑错位:你在
for循环中仅对当前遍历的单个文件名做了.xlsx后缀判断,但判断成立后执行的是df_file["Filename"].str.split(' '),是对整个DataFrame的所有文件名做拆分,没有针对筛选出的xlsx文件操作。只要遍历到任意一个xlsx文件,就会输出全量文件的拆分结果,完全没实现过滤效果。 - 判断逻辑存在隐患:用
".xlsx" in files的判断方式,会把文件名中间包含.xlsx的非xlsx文件误判,比如test.xlsx备份.doc这类文件会被错误筛选,建议用str.endswith('.xlsx')做后缀判断更严谨。 - 逻辑冗余:你用循环逐一遍历文件名,但实际拆分操作调用的是pandas Series的向量化方法,不需要套循环,写法逻辑冲突。
修复方案
基于原有pandas写法的最小改动
直接用pandas布尔索引筛选符合要求的文件,再做拆分,不需要额外写循环:
import os import pandas as pd path = os.getcwd() files = os.listdir(path) df_file = pd.DataFrame(files, columns=['Filename']) # 先筛选后缀为xlsx的行,再对文件名做拆分,最后转为列表 t1_list = df_file[df_file['Filename'].str.endswith('.xlsx')]['Filename'].str.split(' ').tolist() print(t1_list)
更简洁的原生Python实现(不需要依赖pandas)
如果不需要用DataFrame存储文件名,直接用原生逻辑实现即可:
import os t1_list = [] for filename in os.listdir(os.getcwd()): if filename.endswith('.xlsx'): t1_list.append(filename.split(' ')) print(t1_list)
内容的提问来源于stack exchange,提问作者MatmataHi
相关产品推荐
相关产品推荐

