You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Glob匹配指定后缀文件名遇阻,求Python代码优化帮助

解决Excel文件动态匹配与合并优化问题

首先,咱们先搞定你遇到的AttributeError问题:
这个错误是因为你对glob的导入和调用方式不匹配导致的。如果用import glob,调用时要写glob.glob('匹配模式');如果是from glob import glob,直接写glob('匹配模式')就行,不能混合用glob.glob()——不然Python会把导入的glob函数当成对象,去找它的glob属性,自然就会报错。

接下来,针对你要自动匹配同一文件夹中后缀相同的文件的需求,咱们调整匹配逻辑:
从你原来的文件名(比如file-JAN_2019.xlsx)来看,你需要匹配所有以-JAN_2019.xlsx结尾的文件,对应的glob模式应该是"*-JAN_2019.xlsx"——星号*会匹配任意前缀内容,这样就能自动捞取所有符合这个后缀规则的文件。

最后,咱们把整个代码优化得更简洁高效,同时保留你原来的数据清洗逻辑:

import pandas as pd
import glob

# 动态匹配所有以"-JAN_2019.xlsx"结尾的Excel文件
excel_paths = glob.glob("*-JAN_2019.xlsx")

# 批量读取并处理文件:保留你原代码中第一个文件不跳过行,其余文件跳过前21行的逻辑
frames = []
for idx, path in enumerate(excel_paths):
    df = pd.ExcelFile(path).parse(path.sheet_names[0], header=None, index_col=None)
    if idx == 0:
        frames.append(df)
    else:
        frames.append(df.iloc[21:, :])

# 合并数据并执行清洗
combined = pd.concat(frames)
# 移除第4列为'-'或空值的行
combined = combined[~combined[4].isin(['-'])]
combined.dropna(subset=[4], inplace=True)

# 导出最终结果
combined.to_excel("c.xlsx", header=False, index=False)

如果所有文件都需要跳过前21行,可以把读取部分的代码简化成:

frames = [
    pd.ExcelFile(path).parse(path.sheet_names[0], header=None, index_col=None).iloc[21:, :]
    for path in excel_paths
]

另外,你之前写的files.extend(names)是错误的——names是单个文件名字符串,extend会把字符串拆成单个字符添加到列表里,这也是你打印files会得到零散字符的原因,正确的写法是用files.append(names),不过上面的优化代码已经用更简洁的方式处理了这部分逻辑。

内容的提问来源于stack exchange,提问作者P.Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:11:09