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

Python代码写入文件覆盖问题:如何实现每次运行写入新行?

问题解决:让Python代码每次运行将结果写入新行

问题描述

每次运行以下Python代码时,程序都会覆盖output.txt文件的第一行内容。需要修改代码,使其每次运行时将计算结果写入新的一行。

当前代码:

def calculate_averages(input_file_name, output_file_name):
    with open(input_file_name) as f:
        reader = csv.reader(f)
        for row in reader:
            name = row[0]
            these_grades = list()
            for grade in row[1:]:
                these_grades.append(int(grade))
            with open(output_file_name, 'w') as external_file:
                print(name, mean(these_grades), end='\n', file=external_file)
                external_file.close()

问题根源

  • 用'w'模式打开文件会直接清空原有内容并从头写入,循环内重复打开文件会不断覆盖之前的输出。
  • 循环内频繁打开/关闭文件属于冗余操作,既降低效率又导致内容丢失。

修改方案

根据需求选择以下两种方式:

方式1:追加模式写入(保留历史内容,每次运行新增行)

将输出文件的打开操作移到循环外,使用'a'(追加)模式,这样每次运行代码时,新结果会自动追加到文件末尾的新行:

from statistics import mean  # 补充原代码缺失的mean函数导入
import csv

def calculate_averages(input_file_name, output_file_name):
    with open(input_file_name) as f:
        reader = csv.reader(f)
        # 循环外打开输出文件,使用追加模式
        with open(output_file_name, 'a') as external_file:
            for row in reader:
                name = row[0]
                these_grades = [int(grade) for grade in row[1:]]  # 用列表推导式简化代码
                print(name, mean(these_grades), file=external_file)
                # with语句会自动关闭文件,无需手动调用close()

方式2:一次性写入所有结果(覆盖原有文件,所有结果分行显示)

如果希望每次运行都替换整个文件,但将所有计算结果写入不同行,可在循环外以'w'模式打开文件:

from statistics import mean
import csv

def calculate_averages(input_file_name, output_file_name):
    with open(input_file_name) as f:
        reader = csv.reader(f)
        # 循环外打开文件,一次性写入所有结果
        with open(output_file_name, 'w') as external_file:
            for row in reader:
                name = row[0]
                these_grades = [int(grade) for grade in row[1:]]
                print(name, mean(these_grades), file=external_file)

额外优化说明

  • 补充了mean函数的导入(原代码未导入会导致运行报错)
  • 用列表推导式简化成绩列表的生成,代码更简洁高效
  • 移除了手动关闭文件的操作,with上下文管理器会自动处理资源释放,避免泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:25:51