只将文件的最后一行写入输出fi

2024-09-28 01:27:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将变量的输出重定向并写入文件,但只有输出的最后一行显示在我要写入的文件中。然而,当我打印变量时,我得到了我期望的所有行。你知道吗

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()

打印时得到多个rds arn的输出示例:

arn:aws:rds:us-east-1:222222222222:db:databasename01

arn:aws:rds:us-east-1:222222222222:db:databasename02

arn:aws:rds:us-east-1:222222222222:db:databasename03

但是,当我检查我写的文件时,只有:

arn:aws:rds:us-east-1:222222222222:db:databasename03

Tags: 文件instancesclientawsdbboto3database重定向
2条回答

您应该使用with open(filename, mode) as f:write to files,确保即使发生异常也能关闭它们。你知道吗

一旦代码离开with下面的块,您的文件将自动关闭—无需手动关闭。你知道吗

您可以这样重新编写代码:

rds = boto3.client('rds')
rds_instances = rds.describe_db_instances()['DBInstances']
with open('/tmp/arns', 'a') as f:
    for databases in rds_instances:
        arns = ("{0}".format(databases['DBInstanceArn']))
        f.write(arns + '\n') # indented so it is executed foreach "for" loop

您也可以将'\n'添加到您的写入输出-它不会自动添加。你知道吗

当您打印结果时,它会在每次循环运行时打印arns的值。你知道吗

当您将值写入文件时,它只会在循环最后一次运行时取arns的值。你知道吗

您可以在循环之前打开文件并在循环中写入值,而不是在循环之后。然后在循环结束后关闭文件。你知道吗

相关问题 更多 >

    热门问题