我有几个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
如果存在stdin,则fileinput库处理stdin,如果有文件则处理文件.但它迭代单行.
import fileinput
for line in fileinput.input():
process(line)
我真的不明白.我想如果你正在处理小文件,或者如果你对文件做的不多,这看起来很明显.但是,就我的目的而言,这比简单地打开整个文件并将其读入字符串要慢得多,如上所述.
目前我运行上面的脚本就像
$pythonscript textfilename1 > textfilename2
但我希望能够在管道中运行它(和它的兄弟们),比如
$grep pattern textfile1 | pythonscript | pythonscript | pythonscript > textfile2
解决方法:
为什么不呢
files = sys.argv[1:]
if not files:
files = ["/dev/stdin"]
for file in files:
f = open(file)
...