使用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)
关键步骤解释
列数据收集
- 利用
csv.DictReader的fieldnames属性获取CSV所有表头,初始化一个空列表字典 - 逐行读取数据时,将每个列的数值(转换为
float)追加到对应列表中,确保每个键对应整列的完整数据
- 利用
统计计算
- 单独提取统计逻辑为
calculate_stats函数,处理空数据的边界情况(避免除以零等报错) - 遍历
grouped_data的每个键值对,批量计算整列的统计结果并存储
- 单独提取统计逻辑为
HTML生成
- 使用字符串拼接构建完整HTML结构,添加基础CSS样式优化表格显示
- 遍历统计结果,将每列的统计数据插入到表格的对应单元格中,最后写入目标HTML文件
内容的提问来源于stack exchange,提问作者M B
相关产品推荐
相关产品推荐

