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\nanother,row\n"
      

3.單行相互轉換

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

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM