【问题标题】:Can I delete columns from CSV using Ruby?我可以使用 Ruby 从 CSV 中删除列吗?
【发布时间】:2012-02-07 21:47:58
【问题描述】:

查看 Ruby 的 CSV 库的文档,我很确定这是可能且简单的。

我只需要使用 Ruby 删除 CSV 文件的前三列,但运行它没有任何成功。

【问题讨论】:

  • 你写了什么?为什么它不起作用?

标签: ruby csv


【解决方案1】:
csv_table = CSV.read("../path/to/file.csv", :headers => true)

keep = ["x", "y", "z"]

new_csv_table = csv_table.by_col!.delete_if do |column_name,column_values|
  !keep.include? column_name
end

new_csv_table.to_csv

【讨论】:

    【解决方案2】:
    csv_table = CSV.read(file_path_in, :headers => true)
    csv_table.delete("header_name")
    csv_table.to_csv # => The new CSV in string format
    

    查看CSV::Table 文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

    【讨论】:

      【解决方案3】:

      怎么样:

      require 'csv'
      
      File.open("resfile.csv","w+") do |f|
        CSV.foreach("file.csv") do |row|
          f.puts(row[3..-1].join(","))
        end
      end
      

      【讨论】:

      • 此代码从“file.csv”中读取数据,并将其插入“resfile.csv”中,不包含前 3 列。每次运行都会重置“resfile.csv”。如果您希望它附加数据,只需用“a+”打开它。原始文件“file.csv”根本没有改变。
      【解决方案4】:

      我在这里建立了一些问题(真的很喜欢@fguillen 对CSV::Table 所做的事情),但只是将其放入现有项目、定位文件并进行快速更改变得更简单了。

      已添加 byebug 原因...是的。然后还保留了原始文件中的标题(假设它们存在给任何想要使用这个 sn-p 的人)。

      如果您想测试/修补,每次都会覆盖该文件。

      require 'csv'
      require 'byebug'
      
      in_file = './db/data/inbox/change__to_file_name.csv'
      out_file = in_file + ".out"
      
      target_col = "change_to_column_name"
       
      csv_table = CSV.read(in_file, headers: true)
      csv_table.delete(target_col)
      
      CSV.open(out_file, 'w+', force_quotes: true) do |csv|
        csv << csv_table.headers
        csv_table.each_with_index do |row|
          csv << row
        end
      end
      

      【讨论】:

        猜你喜欢
        • 2013-05-17
        • 2023-02-25
        • 1970-01-01
        • 2023-03-29
        • 2022-12-07
        • 1970-01-01
        • 1970-01-01
        • 2019-11-03
        • 2014-12-29
        相关资源
        最近更新 更多