文本处理 – 如何让python程序像正确的unix工具一样?

我有几个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)
    ...
上一篇:将文件内容重定向到php中的标准输入


下一篇:VC中利用多线程技术实现线程之间的通信