我周围有一些Python脚本,我正在重写它们。我对他们所有人都有同样的问题。
对于我来说,如何编写程序以使其像适当的unix工具一样运作尚不明显。
因为这
$ cat characters | progname和这个
$ progname characters应该产生相同的输出。
我在Python中找到的最接近的东西是fileinput库。不幸的是,我并没有真正看到如何重写我的Python脚本,所有这些看起来像这样:
#!/usr/bin/env python 
# coding=UTF-8
import sys, re
for file in sys.argv[1:]:
    f = open(file)
    fs = f.read()
    regexnl = re.compile('[^\s\w.,?!:;-]')
    rstuff = regexnl.sub('', fs)
    f.close()
    print rstuff
如果有标准输入,fileinput库处理标准输入,如果有文件,则处理文件。但是它遍历单行。
import fileinput
for line in fileinput.input():
    process(line)
我真的不明白。我想如果您要处理的是小文件,或者您对文件的处理不多,这似乎很明显。但是,就我的目的而言,这比仅打开整个文件并将其读取为字符串要慢得多,如上所述。
目前我像上面那样运行脚本
$ pythonscript textfilename1 > textfilename2但我希望能够在管道中运行它(及其弟兄),例如
$ grep pattern textfile1 | pythonscript | pythonscript | pythonscript > textfile2
                
                5
              
                  看到这里:stackoverflow.com/questions/1744989/read-from-file-or-stdin
                
                
                  
                    —
                    Mat Mat 2012年