首页 > 解决方案 > Python 能否像 sed、awk 和(甚至)perl 一样用作命令行过滤器?

问题描述

是否有 Python 习惯用法或 cmdline 标志使其能够处理类似于这些示例的文件或标准输入中的行(输入是 .csv 文件;您想要选择和操作特定列,可能是数字列,用于后两者):

awk -F',' '{print $1, $3, $1+$3}' foo.csv
perl -F',' -ane '{print $F[0], $F[2], $F[0]+$F[2]."\n"}' foo.csv

使用条件和正则表达式可以做很多聪明的事情,但我只是想说明基本思想。有没有办法在 Python 中做到这一点,而无需显式打开文件、分隔记录和字段?Python 中一些简明扼要的示例(如果可能的话)将非常有帮助:

python  ???  foo.csv

...不要说得太细了:-)。

标签: pythoncommand-line

解决方案


与 awk 和 Perl 不同,Python 不提供打开参数中指定的文件并遍历文件中的行以快速单行的选项。

相反,您可以将输入文件的内容重定向到 Python 的标准输入,并像这样执行单行:

python -c 'for a, _, b in (map(int, l.split(",")) for l in __import__("sys").stdin): print(a, b, a + b)' < foo.csv

推荐阅读