Python能否以sed、awk和(甚至)perl的方式用作命令行过滤器?

2024-05-08 17:32:25 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有一个Python习惯用法或cmdline标志使其能够处理文件或stdin中的行,类似于这些示例(输入是一个.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

…不要说得太细:-)。你知道吗


Tags: 文件csv示例foo标志stdin数字条件
2条回答

您可以在python中执行bash,使用os.system()函数。比如

import os
cmd = """awk -F',' '{print $1, $3, $1+$3}' foo.csv > result.txt"""
os.system(cmd)

它不像python ??? foo.csv,它必须创建一个python文件。你知道吗

与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

相关问题 更多 >