我目前通过一堆不好记的AWK、sed、Bash和一小部分Perl来做我的文本文件操作。

我已经看到提到的一些地方,python很适合做这种事情。我如何使用Python来代替shell脚本,AWK, sed和朋友?


当前回答

我建议你看一本很棒的在线书籍Dive Into Python。这就是我最初学习这门语言的方式。

除了教你语言的基本结构和大量有用的数据结构之外,它还有一个关于文件处理的很好的章节,以及关于正则表达式等的后续章节。

其他回答

如果您想使用Python作为shell,为什么不看看IPython呢?用互动的方式学习语言也很好。 如果需要进行大量的文本操作,并且使用Vim作为文本编辑器,那么还可以直接用python为Vim编写插件。只需在Vim中输入“:help python”,然后按照说明操作,或者看看这个演示文稿。它是如此简单和强大的编写函数,你将直接在你的编辑器中使用!

最好的选择是专门针对您的问题的工具。如果它正在处理文本文件,那么Sed、Awk和Perl是最佳竞争者。Python是一种通用动态语言。与任何通用语言一样,它支持文件操作,但这不是它的核心目的。如果我特别需要一种动态语言,我会考虑Python或Ruby。

简而言之,非常好地学习Sed和Awk,以及所有其他随*nix风格而来的好东西(所有Bash内置,grep, tr等等)。如果您感兴趣的是文本文件处理,那么您已经使用了正确的方法。

我喜欢Python的一个原因是它比POSIX工具更加标准化。我必须反复检查每个比特是否与其他操作系统兼容。在Linux系统上编写的程序在OSX的BSD系统上可能无法正常工作。对于Python,我只需要检查目标系统是否有足够现代的Python版本。

更棒的是,用标准Python编写的程序甚至可以在Windows上运行!

在研究这个主题时,我发现了这个概念验证代码(通过http://jlebar.com/2010/2/1/Replacing_Bash.html上的评论),它让你“使用简洁的语法在Python中编写类似shell的管道,并在有意义的地方利用现有的系统工具”:

for line in sh("cat /tmp/junk2") | cut(d=',',f=1) | 'sort' | uniq:
    sys.stdout.write(line)

我已经构建了半长的shell脚本(300-500行)和Python代码,它们具有类似的功能。当执行许多外部命令时,我发现shell更容易使用。当有大量文本操作时,Perl也是一个很好的选择。