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
相关产品推荐
相关产品推荐

