2015年1月13日星期二

csvkit : csv处理工具

工具:csvkit
文档:http://csvkit.rtfd.org/
注:目前中文支持一般

其他文件转csv
in2csv some.xls > some.csv
curl https://api.github.com/repos/onyxfish/csvkit/issues?state=open | in2csv -f json -v > issues.csv

查询数据库,结果写入csv(sql2csv有bug,含中文的数据导不出来)
sql2csv --db "mysql://someusr:somepwd@localhost/somedb" --query "select * from sometable"

对csv文件执行sql查询
cat some_has_header.csv |csvsql --query 'select id,count(*) from stdin group by id'
cat some_no_header.csv |header -a id,name,time|csvsql --query 'select id,count(*) from stdin group by id'

清理csv中的错误行
csvclean some.csv

从csv中提取指定列
csvcut -c 1,3 some.csv
csvcut -c name,birthday some.csv

为csv各行添加行号
csvcut -l some.csv

从csv提取指定行(目前有bug,中文字符会失败,需要手动加setdefaultencoding部分绕过,见 issue-359
csvgrep -c 1 -m "I" examples/realdata/FY09_EDU_Recipients_by_State.csv
csvgrep -c 1 -r "^I" examples/realdata/FY09_EDU_Recipients_by_State.csv

指定列,连接两个csv,连接方式默认为inner,还可指定outer/left/right等
csvjoin -c "column_a,column_b" --outer file1.csv file2.csv

行排序
csvsort -c "column_a" -r  a.csv

为不同源文件添加列标识,然后合并到一起
在wine-{red,white}-clean.csv数据添加一个新列type,分别取值为red,white
csvstack -g red,white -n type wine-{red,white}-clean.csv

变换列分隔符为 "|"
csvformat -D "|" some.csv

变换行分隔符为 ";"
csvformat -M ";" some.csv

csv转成json,-i 表示缩进
csvjson -k "some_column" -i 4 some.csv

命令行查看csv
csvlook some.csv

根据csv生成sql创建table的指令
csvsql -i mysql some.csv

对csv执行sql
csvsql --query "select b.id,b.book,group_concat(a.tag) as taglist from a join b on a.id=b.id group by b.id" a.csv b.csv

对指定列做简单统计,例如min/max/sum/mean/median等等
csvstat -c 4 --freq some.csv

没有评论:

发表评论