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

Python写入文件仅保留最后一行问题求助(附RDS操作代码)

问题:写入文件仅保留最后一行,但打印变量能看到所有内容?

我尝试把AWS RDS实例的ARN写入文件,但文件里只显示最后一个ARN;然而在循环里打印变量时,能看到所有的ARN内容。我的代码如下:

import boto3

rds = boto3.client('rds')
rds_instances = rds.describe_db_instances()['DBInstances']
for databases in rds_instances:
    arns = ("{0}".format(databases['DBInstanceArn']))
    # print (arns)
    f = open('/tmp/arns', 'a')
    f.write(arns)
    f.close()

打印时能正常输出所有ARN(每行一个),但文件里却只有最后一行的内容,这是怎么回事?


嘿,这个问题我之前也碰到过!核心原因其实很简单:你写入文件的时候没加换行符,再加上循环里频繁开关文件的小问题,导致看起来像是只保留了最后一行。

咱们拆解一下:

  • 用print(arns)时,Python会自动在输出末尾加\n换行符,所以每次打印的ARN都是单独一行;
  • 但f.write(arns)只会写入ARN本身,不会自动加换行——结果就是所有ARN都被拼在了同一行里,你打开文件看的时候,可能误以为只有最后一个(其实是所有内容挤在一起了)。

另外,每次循环都打开、关闭文件虽然不会丢数据,但确实有点没必要,效率也不高。

给你两种修复方案,推荐第二种更优雅的写法:

方案1:给写入内容加换行符

直接修改write语句,在ARN后面补上\n就行:

import boto3

rds = boto3.client('rds')
rds_instances = rds.describe_db_instances()['DBInstances']
for databases in rds_instances:
    arns = "{0}".format(databases['DBInstanceArn'])
    with open('/tmp/arns', 'a') as f:  # 换成with语句更安全,自动关文件
        f.write(arns + '\n')

方案2:把文件打开放在循环外(推荐)

一次性打开文件,循环写完所有内容再自动关闭,效率更高:

import boto3

rds = boto3.client('rds')
rds_instances = rds.describe_db_instances()['DBInstances']

# 用with语句打开文件,自动处理关闭
with open('/tmp/arns', 'a') as f:
    for db in rds_instances:
        arn = db['DBInstanceArn']  # 变量名改成arn更准确,毕竟每次是单个实例的ARN
        f.write(arn + '\n')

顺便提一句,变量名arns其实不太贴切,因为每次循环你拿到的是单个ARN,改成arn会让代码更易读哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:41:57