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

使用CSV模块实现CSV列统计计算及HTML表格输出的Python问题

CSV列统计并生成HTML表格实现方案

需求说明

编写Python函数,仅使用csv模块完成以下操作:

  • 读取CSV文件内容,以表头为键、整列数据为对应值的形式存储
  • 对每列数据执行统计计算(计数、总和、平均值、最大值、最小值)
  • 将统计结果输出为独立HTML页面的表格

当前问题分析

现有代码仅能逐行读取数据,但未将每列的所有数据收集到一起,无法对整列批量执行统计操作;同时尚未实现HTML生成逻辑。

完整实现代码

import csv

def calculate_stats(data):
    """对一列数值数据计算基础统计量"""
    if not data:
        return {"计数": 0, "总和": "N/A", "平均值": "N/A", "最大值": "N/A", "最小值": "N/A"}
    count = len(data)
    total = sum(data)
    mean = total / count
    max_val = max(data)
    min_val = min(data)
    return {
        "计数": count,
        "总和": round(total, 2),
        "平均值": round(mean, 2),
        "最大值": round(max_val, 2),
        "最小值": round(min_val, 2)
    }

def csv_col_stats_to_html(file: str, html_file: str, title: str = None):
    # 1. 收集每列数据
    with open(file, 'r', encoding='utf-8') as cal_file:
        reader = csv.DictReader(cal_file)
        # 用CSV表头初始化列数据字典
        grouped_data = {key: [] for key in reader.fieldnames}
        
        for row in reader:
            for key in grouped_data:
                # 尝试将值转为数值,跳过非数值内容
                try:
                    value = float(row[key])
                    grouped_data[key].append(value)
                except ValueError:
                    continue
    
    # 2. 计算每列统计结果
    stats_results = {}
    for col_name, data in grouped_data.items():
        stats_results[col_name] = calculate_stats(data)
    
    # 3. 生成HTML表格
    html_title = title if title else "CSV列统计结果"
    html_content = f"""
<!DOCTYPE html>
<html>
<head>
    <title>{html_title}</title>
    <style>
        table {{ border-collapse: collapse; width: 80%; margin: 20px auto; }}
        th, td {{ border: 1px solid #ddd; padding: 8px; text-align: center; }}
        th {{ background-color: #f2f2f2; }}
        h1 {{ text-align: center; color: #333; }}
    </style>
</head>
<body>
    <h1>{html_title}</h1>
    <table>
        <tr>
            <th>列名</th>
            <th>计数</th>
            <th>总和</th>
            <th>平均值</th>
            <th>最大值</th>
            <th>最小值</th>
        </tr>
"""
    # 插入统计结果行
    for col_name, stats in stats_results.items():
        html_content += f"""
        <tr>
            <td>{col_name}</td>
            <td>{stats['计数']}</td>
            <td>{stats['总和']}</td>
            <td>{stats['平均值']}</td>
            <td>{stats['最大值']}</td>
            <td>{stats['最小值']}</td>
        </tr>
    """
    
    html_content += """
    </table>
</body>
</html>
"""
    
    # 写入HTML文件
    with open(html_file, 'w', encoding='utf-8') as f:
        f.write(html_content)

关键步骤解释

  1. 列数据收集

    • 利用csv.DictReader的fieldnames属性获取CSV所有表头,初始化一个空列表字典
    • 逐行读取数据时,将每个列的数值(转换为float)追加到对应列表中,确保每个键对应整列的完整数据
  2. 统计计算

    • 单独提取统计逻辑为calculate_stats函数,处理空数据的边界情况(避免除以零等报错)
    • 遍历grouped_data的每个键值对,批量计算整列的统计结果并存储
  3. HTML生成

    • 使用字符串拼接构建完整HTML结构,添加基础CSS样式优化表格显示
    • 遍历统计结果,将每列的统计数据插入到表格的对应单元格中,最后写入目标HTML文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:31:03