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

