如何使用Python 3向CSV文件的指定单元格写入数据?
实现说明
对应需要写入成绩的区域示意图:
CSV 是纯文本格式,本身没有「单元格」的结构化定义,无法直接原地修改指定位置的内容,可行的实现逻辑是:先将整个 CSV 文件内容读取到内存的二维结构中,修改对应位置的数值后,再整体写回原文件即可。
方法1:使用Python标准库csv实现(无需安装额外依赖,适合作业场景)
你只需要提前确认要写入的成绩区域对应的行列索引(索引从0开始计数,第一行表头行索引为0,第一列序号列索引为0,以此类推),示例代码如下:
import csv import random # 替换为你的CSV文件实际路径 csv_file_path = "scores.csv" # 按照示意图的结构配置写入范围: # 学生行范围:第2行到第6行 → 对应索引1到5 target_row_start = 1 target_row_end = 5 # 成绩列范围:第3列到第5列(语文、数学、英语)→ 对应索引2到4 target_col_start = 2 target_col_end = 4 # 1. 读取全量CSV数据到二维列表 csv_data = [] with open(csv_file_path, mode="r", encoding="utf-8") as f: reader = csv.reader(f) for row in reader: csv_data.append(row) # 2. 写入随机成绩到指定区域 for row_idx in range(target_row_start, target_row_end + 1): # 补全行长度,避免索引越界报错 while len(csv_data[row_idx]) < target_col_end + 1: csv_data[row_idx].append("") for col_idx in range(target_col_start, target_col_end + 1): # 这里可以替换为你自己的随机成绩生成逻辑 csv_data[row_idx][col_idx] = str(random.randint(0, 100)) # 3. 计算平均分(可替换为你自己的计算逻辑) avg_col_idx = target_col_end + 1 for row_idx in range(target_row_start, target_row_end + 1): score_list = [int(csv_data[row_idx][col]) for col in range(target_col_start, target_col_end + 1)] avg_score = round(sum(score_list) / len(score_list), 2) # 补全列长度 while len(csv_data[row_idx]) < avg_col_idx + 1: csv_data[row_idx].append("") csv_data[row_idx][avg_col_idx] = str(avg_score) # 4. 写回原CSV文件 with open(csv_file_path, mode="w", encoding="utf-8", newline="") as f: writer = csv.writer(f) writer.writerows(csv_data)
方法2:使用pandas实现(代码更简洁)
如果允许使用第三方库,安装pandas后可以更简单地实现指定区域的修改:
首先执行安装命令:pip install pandas
示例代码:
import pandas as pd import random df = pd.read_csv("scores.csv") student_count = 5 # 对应5个学生 score_columns = ["语文", "数学", "英语"] # 替换为你实际的成绩列名 # 写入随机成绩 for i in range(student_count): df.loc[i, score_columns] = [random.randint(0, 100) for _ in range(len(score_columns))] # 计算平均分 df["平均分"] = df[score_columns].mean(axis=1).round(2) # 写回原文件 df.to_csv("scores.csv", index=False)
注意事项
- 操作前建议备份原CSV文件,避免错误操作覆盖原始数据
- 如果读取文件出现中文乱码,可将
encoding参数修改为gbk重试 - 确认行列索引和你实际的CSV结构匹配,避免写入位置错误
内容的提问来源于stack exchange,提问作者Eduardo Pérez
相关产品推荐
相关产品推荐

