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

如何从格式不固定的CSV文件中按标题提取指定数据段?

动态定位并读取CSV中的Activities和Sleep区块

针对你这种CSV格式不固定、目标区块位置随机的情况,核心思路是逐行扫描文件,通过标题关键词定位区块起始,再通过空行或其他区块标题判断结束,下面用Python给出具体实现方案:

1. 单文件提取目标区块

写一个函数,遍历CSV的每一行,识别目标标题并收集对应数据,自动跳过空行和无效数据:

import csv

def get_target_sections(csv_file, target_names=["Activities", "Sleep"]):
    # 初始化结果字典,每个目标区块对应一个空列表
    section_data = {name: [] for name in target_names}
    current_section = None  # 标记当前是否处于目标区块中

    with open(csv_file, 'r', encoding='utf-8') as f:
        csv_reader = csv.reader(f)
        for row in csv_reader:
            # 清理行内的空白内容,方便判断
            cleaned_cells = [cell.strip() for cell in row if cell.strip()]
            if not cleaned_cells:
                # 遇到空行,结束当前目标区块
                current_section = None
                continue

            # 检查当前行是否是目标区块的标题
            row_content = ' '.join(cleaned_cells).lower()
            for target in target_names:
                if target.lower() in row_content:
                    current_section = target
                    break  # 找到匹配标题后跳出循环

            # 如果处于目标区块,且当前行不是标题行,就收集数据
            if current_section and not any(t.lower() in row_content for t in target_names):
                # 过滤完全空的数据行
                if any(cell.strip() for cell in row):
                    section_data[current_section].append(row)

    # 移除没有数据的区块(比如只有标题没内容的情况)
    return {k: v for k, v in section_data.items() if v}

2. 批量处理所有CSV文件

结合os模块遍历文件夹下的所有CSV,一次性处理:

import os

def batch_process_csv(folder_path):
    all_results = {}
    for file_name in os.listdir(folder_path):
        if file_name.endswith('.csv'):
            full_path = os.path.join(folder_path, file_name)
            extracted = get_target_sections(full_path)
            if extracted:
                all_results[file_name] = extracted
            else:
                print(f"⚠️ {file_name} 里没找到有效Activities/Sleep数据")
    return all_results

# 调用示例,替换成你的CSV文件夹路径
# all_data = batch_process_csv("/Users/xxx/csv_files")

3. 特殊情况处理

  • 没有目标标题:函数返回的结果里不会包含对应区块,后续可以直接忽略这类文件。
  • 有标题但无数据:函数会自动移除空列表的条目,避免无效数据干扰。
  • 格式混乱的行:通过清理空白单元格的逻辑,只保留有实际内容的行。

进阶优化(可选)

如果需要更灵活的标题匹配,可以用正则表达式;如果要做数据分析,把提取的列表转成pandas DataFrame更方便:

import pandas as pd

# 假设已经提取了Activities数据
activities_rows = get_target_sections("sample.csv")["Activities"]
df_activities = pd.DataFrame(activities_rows)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:55:06