下面是我的代码,它从 Excel 工作表中获取实例名称,并在 aws 帐户中搜索实例名称并获取实例 ID。所以这个过程运行良好。现在我想将数据写入 csv,就像在 csv 中一样,必须有两列,其名称如实例名称和实例 ID,并且数据应打印在各自的列中。请帮助我获得所需的输出。 csv 与数据重叠,一旦打开 csv,我只能看到其中的最后一个值,因为我的脚本会覆盖以前的结果。
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import numpy as np
import os
import boto3
client = boto3.client('ec2')
THIS_FOLDER = os.path.dirname(os.path.abspath(__file__))
my_file = os.path.join(THIS_FOLDER, 'example.xlsx')
df = pd.read_excel(my_file, sheet_name='Sheet2')
list1 = df['EC2NAMES']
print(list1)
client = boto3.client('ec2')
for names in list1:
custom_filter = [{
'Name':'tag:Name',
'Values': [names]}]
print(names)
instances = client.describe_instances(Filters=custom_filter)
for instance in instances['Reservations']:
for key in instance["Instances"]:
x = key['InstanceId']
print(x)
data = pd.DataFrame({'A' : [names],'B' : [x]})
data.to_csv('df111111.csv')
预期输出:
Instancename InstanceID
testinstance 123456
testinstance1 12345656312
testinstance2 12345657237
实际输出:
Instancename InstanceID
testinstance2 12345657237
最佳答案
您可以使用 pandas concat
或 append
但最好的方法是将数据存储到列表中,最后制作一个数据框并将其保存为 csv。
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import numpy as np
import os
import boto3
client = boto3.client('ec2')
THIS_FOLDER = os.path.dirname(os.path.abspath(__file__))
my_file = os.path.join(THIS_FOLDER, 'example.xlsx')
df = pd.read_excel(my_file, sheet_name='Sheet2')
list1 = df['EC2NAMES']
print(list1)
client = boto3.client('ec2')
data = []
for names in list1:
custom_filter = [{
'Name':'tag:Name',
'Values': [names]}]
print(names)
instances = client.describe_instances(Filters=custom_filter)
for instance in instances['Reservations']:
for key in instance["Instances"]:
x = key['InstanceId']
print(x)
data.append([names, x])
pd.DataFrame(data, colums=['A','B']).to_csv('df111111.csv')
关于python - 使用 pandas to_csv 将结果写入 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58963453/