yearID,teamID,lgID,playerID,salary
1985,BAL,AL,boddimi01,625000
1985,BAL,AL,dauerri01,480000
1985,BAL,AL,davisst02,437500
1986,BAL,AL,dempsri01,512500
1986,BAL,AL,dwyerji01,375000
1987,BAL,AL,flanami01,641667
这是我的红宝石代码!
File.foreach('test1.csv') do |csv_line|
row = CSV.parse_line(csv_line)
if File.exist?("year_#{row[0]}_info.csv")
File.open("year_#{row[0]}_info.csv", 'w') do |f|
f.write("\n#{row[4]}")
end
else
File.open("year_#{row[0]}_info.csv", 'w') do |f|
f.write("#{row[4]}")
end
end
end
我正在尝试获取以下输出之一
#year_1985_info.csv
625000
480000
437500
但我只得到这个输出
#year_1985_info.csv
437500
如何获得所需的输出?
提前多多感谢!
答案 0 :(得分:2)
您需要以“追加”模式打开文件。像这样:
File.open("year_#{row[0]}_info.csv", 'a')
注意“a”。
答案 1 :(得分:1)
如果文件存在,您想要附加到它而不是创建一个空文件:
require 'csv'
File.foreach('test1.csv') do |csv_line|
row = CSV.parse_line(csv_line)
ofname = "year_#{row[0]}_info.csv";
if File.exist?(ofname)
File.open(ofname, 'a') do |f| # Note the 'a' here
f.write("\n#{row[4]}")
end
else
File.open(ofname, 'w') do |f|
f.write("#{row[4]}")
end
end
end
我实际上认为在每一行的末尾都有一个换行符会更好;这使得CSV文件更易于使用。它还简化了您的代码:
require 'csv'
File.foreach('test1.csv') do |csv_line|
row = CSV.parse_line(csv_line)
File.open("year_#{row[0]}_info.csv", 'a') do |f|
f.write("#{row[4]}\n")
end
end
请注意,'a'
实际上可以用于创建或附加。
答案 2 :(得分:1)
保持打开和关闭同一个文件效率很低。
我要做的是按年份对它们进行分组,然后将它们一次打印到每个文件中。
scores = CSV.read('test1.csv').drop(1) #drop header line
grouped = scores.group_by(&:first) #group by year
grouped.each do |year, rows|
File.open("year_#{year}_info.csv", "w") do |f|
f.puts rows.map(&:last) #just want last column
end
end