当前位置:  开发笔记 > 编程语言 > 正文

有没有相当于`perl -pi -e`的Python?

如何解决《有没有相当于`perl-pi-e`的Python?》经验,为你挑选了4个好方法。

我知道python -c '',但我想知道是否有更优雅的python相当于perl -pi -e ''.我仍然在整个目录(perl -pi -e s/foo/bar/g *甚至find . | xargs perl -pi -e s/foo/bar/g是子目录)中查找和替换它等相当多的东西.

我实际上觉得Perl Perl(自由形式Tim Toady-ness)使得perl -pi -e工作如此出色,而使用Python你必须做一些导入re模块,创建re实例然后捕获的东西stdin,但也许有一个Python快捷方式可以完成所有这些并且我错过了它(非常想念它)...



1> Jonathan Lef..:

来自' python -h' 的命令行用法肯定强烈表明没有这样的等价物.Perl倾向于广泛使用' $_'(你的例子隐式使用它),我不认为Python支持任何类似的概念,从而使得Perl单行的Python等价物变得更加困难.



2> S.Lott..:

等效于-pi并不难用Python编写.

    使用您真正喜欢的-p和-i功能为自己编写一个方便的模块.我们称之为pypi.py.

    使用 python -c 'import pypi; pypi.subs("this","that")'

您可以使用fileinput模块实现基本的-p循环.

你有一个函数,subs它实现了打开文件,保存备份副本以及在每一行上进行替换的基本"-i"算法.

有一些像这样的activestate食谱.这里有一些:

http://code.activestate.com/recipes/437932/

http://code.activestate.com/recipes/435904/

http://code.activestate.com/recipes/576537/

不是内置的.但写起来并不难.而且一旦写好易于定制.


我建议将模块称为pi.py,存储在site-packages目录中,以`if __name__ =="__ main __":`构造结束,然后使用`python -mpi 调用...`

3> jarondl..:

我知道这已经太晚了几年,但我最近发现了一个非常好的工具叫做pyp,它正是你所要求的.

我认为你的命令应该是:

pyp "p.replace('foo','bar')"



4> monkut..:

我认为perl更适合这种动态脚本.如果你想快速实现一次性脚本编写功能,我建议坚持使用perl,awk,sed和标准的unix命令行工具.

但是如果你对使用python感兴趣,我使用optparse编写自己的命令行工具并推荐它.optparse提供了一个简洁易用的命令行选项解析器,内置帮助生成.

这是一个示例:

def myfunc(filename, use_versbose):
   # function code

if __name__ == '__main__':
    from optparse import OptionParser

    parser = OptionParser()
    parser.add_option("-f", "--file", dest="filename",
                      help="write report to FILE", metavar="FILE")
    parser.add_option("-q", "--quiet",
                      action="store_false", dest="verbose", default=True,
                      help="don't print status messages to stdout")

    (options, args) = parser.parse_args()

    if options.filename:
        myfunc(options.filename, options.verbose)

    else:
        print 'ERROR -- Necessary command line options not given!'
        print parser.print_help()

parser.print_help()生成以下输出,并在命令行中给出-h或--help时自动显示:

usage:  [options]

options:
  -h, --help            show this help message and exit
  -f FILE, --file=FILE  write report to FILE
  -q, --quiet           don't print status messages to stdout


这实际上绝不是单线的替代品,因此大部分都不是问题的答案
是的,但也许更优雅的解决方案不是'perl -pi -e`的等效,而是为经常执行的任务编写自己的命令行工具."myscript.py -x this -y that"可能比"python -c"导入这个更干净; dostuff(this,that)'".这取决于您的个人需求和偏好.
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有