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

如何用Python从多文件夹txt提取指定数据并整理为Excel/CSV

解决方案

核心思路

不需要先转CSV,直接读取txt文件解析X-Y数据更高效。通过遍历双文件夹结构,按时间点匹配数据,最后用Pandas整理成目标格式输出。

实现代码

import os
import pandas as pd

# 父文件夹路径,根据实际情况修改
parent_dir = "02202023"
# 子文件夹名称
groups = ["Control", "Experimental"]
# 时间点列表,对应txt文件名
time_points = ["0second", "30second", "60second", "90second"]

# 初始化数据存储字典
result_data = {
    "Time": time_points,
    "Control": [],
    "Experimental": []
}

# 遍历每个实验组
for group in groups:
    # 遍历每个时间点的文件
    for time_point in time_points:
        file_path = os.path.join(parent_dir, group, f"{time_point}.txt")
        y_value = None
        
        # 读取txt文件,查找X=400的行
        with open(file_path, "r") as f:
            for line in f:
                # 假设X和Y用空格/制表符分隔,根据实际分隔符调整
                parts = line.strip().split()
                if len(parts) != 2:
                    continue
                x_val, y_val = parts
                # 注意X值可能是字符串格式的数字,转成整数/浮点数判断
                try:
                    if float(x_val) == 400:
                        y_value = float(y_val)
                        break
                except ValueError:
                    # 跳过非数字的行
                    continue
        
        # 将Y值存入对应列表
        result_data[group].append(y_value if y_value is not None else "N/A")

# 转换成DataFrame
df = pd.DataFrame(result_data)

# 保存为CSV(也可以用to_excel,需要安装openpyxl库)
df.to_csv("result.csv", index=False)
# 如果需要Excel格式,取消下面注释
# df.to_excel("result.xlsx", index=False, engine="openpyxl")

关键说明

  • 文件路径处理:用os.path.join拼接路径,避免跨系统路径问题
  • 数据解析:逐行读取txt,跳过无效行,通过类型转换判断X是否等于400,兼容整数/浮点数格式的X值
  • 异常处理:处理非数字行的情况,避免程序崩溃;如果找不到X=400的行,填充"N/A"标记
  • 输出选择:默认输出CSV(无需额外依赖),如果需要Excel,需先安装openpyxl库(pip install openpyxl)

适配双文件夹的逻辑

通过外层循环遍历Control和Experimental两个子文件夹,内层循环遍历时间点文件,确保每个时间点的两组数据对应存入结果字典,最终通过Pandas自动对齐列数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:05:07