【发布时间】:2015-06-30 08:13:32
【问题描述】:
系统管理员(厨师)比 ruby 人多,所以这可能需要五分钟的时间。 我正在执行一项任务,我编写了一个 ruby 脚本,该脚本从多个文件中提取 json 数据,对其进行解析,并将所需的字段写入单个 .csv 文件。基本上是提取有关 aws 帐户的元数据并将其放入会计友好的格式中。
从另一个 stackoverflow 获得了很多关于如何解决单个文件问题的帮助,json.parse help。
我的问题是我试图从数组中的多个 JSON 文件中提取相同的数据。我可以使用下面的代码让它遍历每个文件。
require 'csv'
require "json"
delim_file = CSV.open("delimited_test.csv", "w")
aws_account_list = %w(example example2)
aws_account_list.each do |account|
json_file = File.read(account.to_s + "_aws.json")
parsed_json = JSON.parse(json_file)
delim_file = CSV.open("delimited_test.csv", "w")
# This next line could be a problem if you ran this code multiple times
delim_file << ["EbsOptimized", "PrivateDnsName", "KeyName", "AvailabilityZone", "OwnerId"]
parsed_json['Reservations'].each do |inner_json|
inner_json['Instances'].each do |instance_json|
delim_file << [[instance_json['EbsOptimized'].to_s, instance_json['PrivateDnsName'], instance_json['KeyName'], instance_json['Placement']['AvailabilityZone'], inner_json['OwnerId']],[]]
end
delim_file.close
end
end
但是,每当我这样做时,它每次都会覆盖 .csv 文件中的同一行。我尝试在数组末尾添加一个 \n 字符串,将数组转换为带有散列的字符串并执行 \n,但所做的只是在它覆盖的同一行中添加一行。
我将如何编写它读取每个 json 文件,然后将每个文件元数据附加到新行?这看起来像是编写正确循环的简单案例,但我无法弄清楚。
【问题讨论】:
-
stackoverflow.com/q/7085595/438992 例如,以追加模式打开,而不是写入模式。