我已经有CSV文件,内容如
a1 a2 a3
1 2 3
4 5 6
5 8 2
现在,我想要什么,当我读取任何行时,我想在csv文件中添加一个标志,如
a1 a2 a3 flag
1 2 3 1
4 5 6 1
5 8 2
上述标志1表示此记录已插入表格中。
那么如何在csv文件中添加标志?
提前致谢
答案 0 :(得分:3)
您需要使用其他列编写新的CSV文件,然后用新文件替换原始文件。
答案 1 :(得分:3)
我提出了两种方法将列附加到现有的CSV文件中。
方法1后期通过将文件读入散列数组来合并新列,然后将列附加到每行的末尾。如果多次运行,此方法可能会出现异常。
require 'csv'
filename = 'test.csv'
# Load the original CSV file
rows = CSV.read(filename, headers: true).collect do |row|
row.to_hash
end
# Original CSV column headers
column_names = rows.first.keys
# Array of the new column headers
additional_column_names = ['flag']
# Append new column name(s)
column_names += additional_column_names
s = CSV.generate do |csv|
csv << column_names
rows.each do |row|
# Original CSV values
values = row.values
# Array of the new column(s) of data to be appended to row
additional_values_for_row = ['1']
values += additional_values_for_row
csv << values
end
end
# Overwrite csv file
File.open(filename, 'w') { |file| file.write(s) }
方法2早期将新列合并到行哈希中。这种方法非常精巧,它更紧凑,并且如果运行多次,可以避免重复的列名称。此方法还可用于更改CSV中的任何现有值。
require 'csv'
filename = 'test.csv'
# Load the original CSV file
rows = CSV.read(filename, headers: true).collect do |row|
hash = row.to_hash
# Merge additional data as a hash.
hash.merge('flag' => '0')
# BONUS: Change any existing data here too!
hash.merge('a1' => hash['a1'].to_i + 1 )
end
# Extract column names from first row of data
column_names = rows.first.keys
txt = CSV.generate do |csv|
csv << column_names
rows.each do |row|
# Extract values for row of data
csv << row.values
end
end
# Overwrite csv file
File.open(filename, 'w') { |file| file.write(txt) }
答案 2 :(得分:0)
不确定是否可以在同一个文件中追加新列,但是可以在csv中添加新行:
CSV.open('your_csv.csv', 'w') do |csv|
customers.array.each do |row|
csv << row
end
end
希望这有帮助。