ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-08-08 21:56:02  阅读:224  来源: 互联网

标签:python pipe text-processing stdin stdout


我有几个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)
    ...

标签:python,pipe,text-processing,stdin,stdout
来源: https://codeday.me/bug/20190808/1624937.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有