Python能否作为命令行过滤器?求类似sed/awk/perl的简洁处理示例
Python作为命令行过滤器的实现方案
当然可以!Python完全能像sed、awk或Perl一样充当命令行过滤器,而且有简洁的写法避免手动编写文件打开、字段拆分这类重复代码。针对你给出的CSV列操作示例,这里提供两种常用的实现方式:
1. 稳妥的CSV专用写法(推荐)
如果处理的是标准CSV文件(可能包含带引号的字段、跨行内容等),用Python内置的csv模块是最靠谱的,不需要手动处理字段拆分:
python -c "import sys, csv; for row in csv.reader(sys.stdin): print(row[0], row[2], float(row[0]) + float(row[2]))" foo.csv
这个命令的关键细节:
-c参数让Python直接执行引号内的代码片段csv.reader(sys.stdin)自动读取标准输入(无论是指定的foo.csv,还是通过管道传入的内容,比如cat foo.csv | python ...),并正确拆分CSV字段- 无需显式调用
open()打开文件,sys.stdin会自动处理输入源
2. 简化的纯字符串拆分写法(适合简单场景)
如果你的CSV格式非常简单(没有带引号的逗号、换行等特殊情况),可以用更简洁的字符串拆分方式:
python -c "import sys; for line in sys.stdin: f = line.strip().split(','); print(f[0], f[2], float(f[0]) + float(f[2]))" foo.csv
额外说明
相比awk/Perl的极简语法,Python的写法会稍长一点,但胜在可读性更强,而且当你需要处理更复杂的逻辑(比如数据类型转换、条件过滤、调用第三方库)时,Python的生态和语法优势会更明显。比如如果要对计算结果做四舍五入,只需要把float(row[0])+float(row[2])改成round(float(row[0])+float(row[2]), 2)即可,非常直观。
内容的提问来源于stack exchange,提问作者Eric Snyder
相关产品推荐
相关产品推荐

