ruby读取csv行数

Python011

ruby读取csv行数,第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#=>ArrayendCSV.foreach('test.csv',headers:true)do|row|puts row.class#=>CSV::Rowend#return_headers:true 返回标题CSV.foreach('test.csv',return_headers:true)do|row|p row#=>返回Arrayend

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

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

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

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

直接用就可以实现:

require 'csv'

CSV.foreach("test.csv") do |row|

puts row

end

参考实例如下:

.page-model-form

.page-admin-form-info

.desc 请先下载 CSV 示例文件,按照给定格式填充数据,然后上传导入

%a.download{:href=>'/csv_demo/students.csv'} 下载示例文件

= flash_info

= form_tag "/admin/students/import_from_csv",:method=>:post,:multipart =>true do

.field

%label 选择 CSV 文件

= file_field_tag :csv_file

.field

=submit_tag '确定导入'

csv文件本质上是一个文本文件,具体的读取和写入方法有两种:

直接对csv文件进行文件读写操作,每一行是一条记录,按行读取即可,简单代码如下:

with open("XXX.csv","wr") as f:

f.readline()

f.write()

2.使用第三方库中的csv文件读写函数(本质上还是使用python的文件读写方法),如科学计算包pandas包中就有read_csv()  to_csv()等函数,其他的一些第三方包里也有,可以自行查询。

两种方法各有优劣,第一种方法的优点就是可控性强,但是代码相对较多,对于python2编码处理很麻烦;第二种方法的优点是代码量小,调用方便,处理编码问题相对容易(在函数中加一个encoding参数即可),但是代码内部比较复杂,可控性较差