• ruby 操作csv


    参考:
    https://www.cnblogs.com/wf0117/p/9080726.html

    1.读取csv

    文件中读取:一次读入全部(设置headers使 CSV#shift() 以CSV::Row对象返回而不是数组;使

    require 'csv'
    
    CSV#read()  返回 CSV::Table 对象而不是数组)
    
    
    CSV.read('test.csv') #=> Array
    
    #headers默认为false,如果设置为true,csv的第一行将被视为标题
    CSV.read('test.csv', headers:true) #=> CSV::Table
    
    #headers设置为数组,这个数组将被作为标题
    CSV.read('test.csv', headers:[1,2,3,4,5]) 
    
    #headers设置为字符串,这个字符串内容将被作为标题
    CSV.read('test.csv', headers:"1,2,3,4,5")
    
    

    ​ 文件中读取:一次读入一行

    
    #由于headers配置,返回类型发生变化(这个方法默认为第一行是标题,不会进行返回)
    CSV.foreach 'test.csv' do |row|
      puts row.class #=> Array
    end
    
    CSV.foreach('test.csv', headers:true) do |row|
      puts row.class #=> CSV::Row
    end
    
    #return_headers:true 返回标题
    CSV.foreach('test.csv', return_headers:true) do |row|
      p row  #=> 返回Array
    end
    
    

    ​ 字符串中读取:一次读取一行

    CSV.parse("CSV,data,String") do |row|
      # use row here...
    end
    

    ​ 字符串中读取:全部读取

    CSV.parse("CSV,data,String")
    
    #[]方法需要返回的类型为CSV::ROW;所以设置参数headers:true
    content = File.read('data.csv')
    csv = CSV.parse(content, headers:true)
    sum = 0
    csv.each do |row|
      sum += row['id'].to_i
    end
    puts sum
    
    

    2.写入csv

    写入文件

    CSV.open("path/to/file.csv", "wb") do |csv|
      csv << ["row", "of", "CSV", "data"]
      csv << ["another", "row"]
      # ...
    end
    

    ​ 写入字符串

    csv_string = CSV.generate do |csv|
      csv << ["row", "of", "CSV", "data"]
      csv << ["another", "row"]
      # ...
    end
    #=> "row,of,CSV,data
    another,row
    "
    

    ​   

    3.单行相互转换

    csv_string = ["CSV", "data"].to_csv   #=> "CSV,data
    "
    csv_array  = "CSV,String".parse_csv   #=> ["CSV", "String"]
    

    例子:

    rows = [['a1', 'a2', 'a3'],['b1', 'b2', 'b3', 'b4'], ['c1', 'c2', 'c3'], ... ]
    csv_str = rows.inject([]) { |csv, row|  csv << CSV.generate_line(row) }.join("")
    #=> "a1,a2,a3
    b1,b2,b3
    c1,c2,c3
    " 
    

    完成以上所有操作保存到一个csv文件中。

    File.open("ss.csv", "w") {|f| f.write(rows.inject([]) { |csv, row|  csv << CSV.generate_line(row) }.join(""))}
    
    [Haima的博客] http://www.cnblogs.com/haima/
  • 相关阅读:
    c# winfrom 查看网络图片
    C# winfrom 读取txt文本内容
    c# winfrom 下载网页源代码
    c# winfrom 下载网络资源
    c# 换行符
    内存映射问题
    APUE 书中 toll 函数
    [P3387] 【模板】缩点
    [P5960] 【模板】差分约束算法
    [CF1442C] Graph Transpositions
  • 原文地址:https://www.cnblogs.com/haima/p/15240310.html
Copyright © 2020-2023  润新知