zoukankan      html  css  js  c++  java
  • ruby 操作csv

    1.读取csv

    • 文件中读取:一次读入全部(设置headers使  CSV#shift()  以CSV::Row对象返回而不是数组;使  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"]
  • 相关阅读:
    爬取毛概题库
    python爬虫抓取豆瓣电影
    青蛙的约会(POJ 1061 同余方程)
    1234: ZJTZYRC筛offer(并查集 )
    A Simple Math Problem(HDU 1757 构造矩阵)
    Number Sequence(HDU 1005 构造矩阵 )
    How many ways??(HDU 2157)
    线性结构上的动态规划
    Codeforces Round #427 (Div. 2)
    Codeforces Round #426 (Div. 2)
  • 原文地址:https://www.cnblogs.com/wf0117/p/9080726.html
Copyright © 2011-2022 走看看