面向流的csv修改工具

csvsed的Python项目详细描述


一个面向流的csv修改工具。就像脱光的“sed” 命令,但用于表格数据。

tl;dr

安装:

$ pip install csvsed

使用:

# given a sample CSV
$ cat sample.csv

Employee ID,Age,Wage,Status
8783,47,"104,343,873.83","All good, but nowhere to go."2003,32,"98,878,784.00",A-OK

# modify that data with a series of `csvsed` pipes
$ cat sample.csv \
| csvsed -c Wage s/,//g \ # remove commas from the Wage column
| csvsed -c Status 'y/A-Z/a-z/'\ # convert Status to all lowercase
| csvsed -c Status 's/.*(ok|good).*/\1/'\ # restrict to keywords 'ok' & 'good'
| csvsed -c Age 'e/xargs -I {} echo "{}*2" | bc/'# double the Age column

Employee ID,Age,Wage,Status
8783,94,104343873.83,good
2003,64,98878784.00,ok

安装

$ pip install csvsed

用法和示例

安装csvsedpython包还将安装 csvsed命令行工具。对所有命令使用csvsed --help。 行选项,但这里有一些例子让你去。鉴于 输入文件sample.csv

Employee ID,Age,Wage,Status
8783,47,"104,343,873.83","All good, but nowhere to go."
2003,32,"98,878,784.00",A-OK

使用“s”从“工资”列中删除数千个分隔符 (替换)修饰符:

$ cat sample.csv | csvsed -c Wage s/,//g
Employee ID,Age,Wage,Status
8783,47,104343873.83,"All good, but nowhere to go."2003,32,98878784.00,A-OK

使用“s”(替换)和“y”转换/提取一些文本 (音译)修饰语:

$ cat sample.csv | csvsed -c Status 's/^All (.*),.*/\1/'\
| csvsed -c Status 's/^A-(.*)/\1/'\
| csvsed -c Status 'y/a-z/A-Z/'
Employee ID,Age,Wage,Status
8783,47,"104,343,873.83",GOOD
2003,32,"98,878,784.00",OK

使用“e”(执行)修饰符使“age”列成方形:

$ cat sample.csv | csvsed -c Age 'e/xargs -I {} echo "{}^2" | bc/'
Employee ID,Age,Wage,Status
8783,2209,"104,343,873.83","All good, but nowhere to go."2003,1024,"98,878,784.00",A-OK

但是,这称为每个列的外部程序(相当于 大数据集效率低……。所以让我们做更多 高效,使用“连续”模式程序。假设如下 id2name.py程序,在stdin上用一个列获取csv (员工id)并将csv写入stdout,id转换为 姓名:

#!/usr/bin/env pythonimportsys,csvkittable={'8783':'ElfenKyng','2003':'Stradivarius'}# NOTE: *not* using csvkit's reader because it reads-ahead# causing problems since this must be stream-oriented...writer=csvkit.CSVKitWriter(sys.stdout)whileTrue:item=sys.stdin.readline()ifnotitem:breakitem=item.strip()writer.writerow([table[item]ifitemintableelseitem])sys.stdout.flush()

然后下面将有效地转换“employee id”列 收件人姓名:

$ cat sample.csv | csvsed -c 'Employee ID''e|./id2name.py|c'
Employee ID,Age,Wage,Status
ElfenKyng,47,"104,343,873.83","All good, but nowhere to go."
Stradivarius,32,"98,878,784.00",A-OK

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在使用mutator方法时遇到问题   java应用程序是否连接到服务器   java OutputStreamWriter不重写文件   java如何将捕获的异常与异步任务安卓中的标准异常进行比较?   java初始化和声明对象和方法   用于上传个人资料图片的java ActivityResultLauncher   如何检查Java字符串的第二个数字是否在1到5之间   googleappengine和Java版本   java如何获取eclipse tomcat配置文件夹路径?   在Android上使用GSON时出现java垃圾收集器问题   如何在java中逐层显示图像   JavaSpring数据规范动态条件   java Spring MongoDB在请求时非常慢   java如何在图像滑动视图上进行循环?   java我在函数中有一个空指针异常,不知道如何修复它   通过java运行的Cassandra Talend作业引发错误   java ConcurrentHashMap。initTable(),为什么检查表两次为空?