【问题标题】:Parse CSV File, Take Input From Columns, Output to A New Column and Export to a new CSV解析 CSV 文件,从列中获取输入,输出到新列并导出到新 CSV
【发布时间】:2014-08-11 19:16:27
【问题描述】:

我有一个包含 7-8 列数据的 CSV。

对于每一行,我想 1)取2列的值 2)在我定义的方法中使用这些值 3)将输出添加到新列 4)删除原来的2列 5) 导出到新的 CSV

我对 Ruby 和一般编程非常陌生,我似乎找不到任何关于如何做到这一点的答案(我能理解)。

我的一个例子是这样的:

CSV 标题:标题、日期、日期、时间 示例值:Fun in the Sun,星期三,09/11/14,下午 3:00

我已经(试图写的)结合日期和时间的方法:

def convert_time (time) 
    time_array = time.split(" ")
    time_numbers = time_array[0]
    time_mod = time_array[1]
    time_numbers = time_numbers.split("")
    if time_mod == "pm" 
        time_numbers[0] = (time_numbers[0].to_i + 12).to_s
    end
    time_numbers.join("") 
end

def add_date (date, time)
    # 09/11/14 -> 20140911
    date_array = date.split("/")
    new_date = "2014" + date_array[0] + date_array[1]
    output = "TZID=AMERICA/LOS ANGELES:#{new_date}" + "t" + convert_time(time)
end

我想获取 CSV 文件中的值(日期和时间)并将它们作为参数添加到我的 add_date 方法中,以获取我在新列中添加到 CSV 中的值

非常感谢任何正确方向的帮助或指示。

【问题讨论】:

    标签: ruby csv export-to-csv


    【解决方案1】:

    没有看到您的 CSV 文件的片段,我无法给您确切的答案。但是,我可以使用我制作的 CSV 文件,该文件看起来应该类似于您的数据。无论他们在哪里,您都必须填补空白。

    我以前从未处理过在 Ruby 中解析 CSV 文件的问题,因此我将逐步介绍我的问题解决过程,并希望它能说明您将来如何解决此类问题。

    首先,这是我正在使用的 CSV 文件:

    Title, Day, Date, Time
    Fun in the Sun, Wed, 09/11/14, 3:00 pm
    

    在 Google 上快速搜索 Ruby CSV 会得到 Ruby 的 CSV 解析类的文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html

    进一步搜索 Ruby csv headers 会产生此堆栈溢出帖子:Parse CSV file with header fields as attributes for each row

    太好了,现在我们可以这样做了:

    CSV.foreach('my_file.csv', :headers => true) do |csv_obj|
      # Access CSV data here
    end
    

    查看 CSV 类的文档,我们还可以将数据写入 CSV。最后,我们可以解决您的问题:

    def add_date (date, time)
      # 09/11/14 -> 20140911
      date_array = date.split("/")
      new_date = "2014" + date_array[0] + date_array[1]
      output = "TZID=AMERICA/LOS ANGELES:#{new_date}" + "t" + convert_time(time)
    end
    
    CSV.open('output_file.csv', 'wb') do |csv_out|
      CSV.foreach('input_file.csv', :headers => true) do |csv_in|
        csv_out << [csv_in['Title'], csv_in['Day'], add_date(csv_in['Date'], csv_in['Time'])]
      end
    end
    

    有意义吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 2022-12-24
      • 2015-11-15
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多