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

如何迭代遍历时间格式命名的文件夹并提取Excel数据存入数组

文件夹遍历与数据提取实现方案

基础单线程实现

适合文件夹数量较少的场景,逻辑简单不易出错,可保证两个数组长度完全一致:

from pathlib import Path
import pandas as pd
from datetime import datetime

# 初始化结果数组
arrayA = []
arrayB = []

# 配置参数
TIME_FORMAT = "%Y_%m_%d_%H-%M-%S-%f" # 时间格式对应文件夹命名规则
EXCEL_FILENAME = "NAMEOFEXCELFILE.xlsx" # 固定Excel文件名

# 遍历当前目录下所有条目
for entry in Path.cwd().iterdir():
    # 跳过非文件夹条目
    if not entry.is_dir():
        continue
    # 解析文件夹名对应时间,跳过不符合命名规则的文件夹
    try:
        # 如果文件夹后缀是3位毫秒而非6位微秒,把下一行改为 entry.name + "000" 即可兼容
        folder_time = datetime.strptime(entry.name, TIME_FORMAT)
    except ValueError:
        continue
    # 拼接目标Excel路径
    excel_path = entry / EXCEL_FILENAME
    # 跳过不存在目标Excel的文件夹
    if not excel_path.exists():
        continue
    # 读取Excel数据并存入数组
    excel_data = pd.read_excel(excel_path, skiprows=1, header=None, usecols=[5])
    arrayA.append(folder_time)
    arrayB.append(excel_data)

如果需要把时间存储为字符串/时间戳格式,仅需修改arrayA.append的内容为entry.name或folder_time.timestamp()即可。

高效率优化方案

文件夹数量较多时,Excel IO操作是主要性能瓶颈,推荐用多进程并行读取提速,效率可提升数倍:

from pathlib import Path
import pandas as pd
from datetime import datetime
from concurrent.futures import ProcessPoolExecutor

# 配置参数
TIME_FORMAT = "%Y_%m_%d_%H-%M-%S-%f"
EXCEL_FILENAME = "NAMEOFEXCELFILE.xlsx"

def process_single_folder(entry):
    if not entry.is_dir():
        return None
    try:
        folder_time = datetime.strptime(entry.name, TIME_FORMAT)
    except ValueError:
        return None
    excel_path = entry / EXCEL_FILENAME
    if not excel_path.exists():
        return None
    excel_data = pd.read_excel(excel_path, skiprows=1, header=None, usecols=[5])
    return (folder_time, excel_data)

if __name__ == "__main__":
    arrayA = []
    arrayB = []
    all_entries = list(Path.cwd().iterdir())
    # max_workers可按CPU核心数调整,常规设为CPU核心数*2即可
    with ProcessPoolExecutor(max_workers=8) as executor:
        results = executor.map(process_single_folder, all_entries)
    # 过滤无效结果,组装最终数组
    for res in results:
        if res is not None:
            arrayA.append(res[0])
            arrayB.append(res[1])

额外优化点:

  • 你当前已经使用usecols限定读取列,已经大幅降低了Excel读取开销,若不需要DataFrame格式可追加.values直接存储numpy数组,降低内存占用
  • 若确认所有文件夹都符合命名规则且存在目标Excel,可去掉异常判断和存在性校验,进一步提升运行速度

内容的提问来源于stack exchange,提问作者7Programmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:27:02