我周围有一些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年