使用python文本处理模块编辑多个文件

massedit的Python项目详细描述


massedit

以前称为python mass editor

实现一个python mass编辑器来使用python处理文本文件 代码。修改作为diff输出显示在stdout上。一 然后可以使用-w/-write选项修改目标文件。 这与python 3附带的2to3工具非常相似。

<表> < COLGROUP > < COL/> <正文> 警告 :有关使用 eval() 的警告

这个工具非常有用,但它确实依赖于python eval() 函数,不检查正在执行的代码。 这是一个重大的安全风险,不应在 生产环境。

有关危险的详细讨论,请参见Ned Batchelder的文章 链接到eval()和规避它们的方法。请注意 本文中建议的反措施此时实施。

<表>

用法

您可能需要了解python re模块的基本知识 表达式)。

usage: massedit.py [-h] [-V] [-w] [-v] [-e EXPRESSIONS] [-f FUNCTIONS]
                   [-x EXECUTABLES] [-s START_DIRS] [-m MAX_DEPTH] [-o output]
                   pattern [pattern ...]

Python mass editor

positional arguments:
  pattern               shell-like file name patterns to process.

optional arguments:
  -h, --help            show this help message and exit
  -V, --version         show program's version number and exit
  -w, --write           modify target file(s) in place. Shows diff otherwise.
  -v, --verbose         increases log verbosity (can be specified multiple
                        times)
  -e EXPRESSIONS, --expression EXPRESSIONS
                        Python expressions applied to target files. Use the
                        line variable to reference the current line.
  -f FUNCTIONS, --function FUNCTIONS
                        Python function to apply to target file. Takes file
                        content as input and yield lines. Specify function as
                        [module]:?<function name>.
  -x EXECUTABLES, --executable EXECUTABLES
                        Python executable to apply to target file.
  -s START_DIRS, --start START_DIRS
                        Directory(ies) from which to look for targets.
  -m MAX_DEPTH, --max-depth-level MAX_DEPTH
                        Maximum depth when walking subdirectories.
  -o FILE, --output FILE
                        redirect output to a file
  -g FILE, --generate FILE
                        generate input file suitable for -f option
  --encoding ENCODING   Encoding of input and output files
  --newline NEWLINE     Newline charachter for output files

Examples:
# Simple string substitution (-e). Will show a diff. No changes applied.
massedit.py -e "re.sub('failIf', 'assertFalse', line)" *.py

# File level modifications (-f). Overwrites the files in place (-w).
massedit.py -w -f fixer:main *.py

# Will change all test*.py in subdirectories of tests.
massedit.py -e "re.sub('failIf', 'assertFalse', line)" -s tests test*.py

如果massedit是作为包安装的(例如来自pypi),则可以作为命令行工具与之交互:

python -m massedit -e "re.sub('assertEquals', 'assertEqual', line)" test.py

或作为库(上面的命令行选项将作为kewyord参数传递):

>>> import massedit
>>> filenames = ['massedit.py']
>>> massedit.edit_files(filenames, ["re.sub('Jerome', 'J.', line)"])

最后,在 发行版。

安装

从http://github.com/elmotec/massedit下载massedit.py

pip install massedit

人-源-源操作不良

我发现自己主要使用massedit进行源到源的修改 像这样的大型代码库:

首先使用将 处理源代码。例如,要添加标题:

def add_header(lines, file_name):
    yield '// This is my header'  # will be the first line of the file.
    for line in lines:
        yield line

将fixer.py的位置添加到您的 $pythonpath ,然后简单地 像这样调用massedit.py

massedit.py -f fixer:add_header *.h

您可以添加 -s 选项,以便以递归方式处理所有 .h 文件。

计划

  • 添加对第三方工具的支持(例如 autopep8 )以处理文件。
  • 添加对表达式文件的支持作为参数以允许多个 立即修改。
  • 找到一个令人满意的方法(即易于使用)来处理多行regex 当前版本按行工作。

基本原理

  • 我很难练习几种以上的方言 表达式。
  • 我需要一些可以移植到windows的东西,而不必为eol而烦恼。
  • 我相信python是构建比 简单的基于正则表达式的替换。

背景

我已经使用runsed和checksed(来自unix电动工具)很多年了,而且 直到我碰到格雷厄姆,才在窗户下找到一个好的替代品 在activestate上,fawcett python recipe 437932 。它激励我写 海量编辑。

核心有点肉质化了,我们到了。如果你觉得有用 请增强它,不要忘记提交补丁。谢谢!

如果您对类似awk的工具更感兴趣,您可能会发现 pyp a 更好的选择。这当然是一个更成熟的工具。

许可证

根据麻省理工学院许可证的条款获得许可。请参阅附件license.txt。

更改

< DL>
0.68.5(2019-04-13)
添加–newline选项以强制newline输出。谢谢@alfnet!
0.68.4(2017-10-24)
修复了当-w选项为 无所作为。谢谢@tgoodlet!
0.68.3(2017-09-20)
添加–生成选项以快速生成fixer.py模板文件 要修改为与-f fixer.fixit选项一起使用。添加官方 支持Python3.6
0.68.1(2016-06-04)
修复了处理非ascii文件时的编码问题。 added–encoding选项在需要时强制编码的值。 列出了对Python3.5的支持
0.67.1(2015-06-28)
文档修复。
0.67(2015-06-23)
向处理函数添加了文件名参数。 修复了sys.stdout/stderr的错误关闭。 改进了处理函数不带2个参数时的诊断。 交换了-v和-v选项以与python保持一致。 Pylint修复。 增加了对Python3.4的支持。 放弃了对Python3.2的支持。
0.66(2013-07-14)
使用-f选项修复丢失的可执行位(感谢myint)。
0.65(2013-07-12)
添加了-f选项以在单独的文件/模块中执行代码。增加了travis持续集成(感谢myint)。修复了Python2.7支持(感谢myint)。
0.64(2013-06-01)
修复了setup.py,以便massedit作为脚本安装。修复了eol问题(感谢myint)。
0.63(2013-05-27)
重命名为massedit。以前的版本仍然称为python mass editor。
0.62(2013-04-11)
修复了当 表达式是空字符串。
0.61(2012-07-06)
添加了massedit.edit_files功能,以方便作为库而不是作为 命令行工具(由maxim veksler建议)。
0.60(2012-07-04)
将参数作为模式而不是文件来处理 多个子目录中的多个文件。添加了-s(开始目录) 和-m(最大深度)选项。
0.52(2012-06-05
为python 3升级。仍然与Python2.7兼容。
0.51(2012-05年)
初始版本(beta版)。

参与者确认

Steven Myint, https://github.com/myint tgoodlet,https://github/tgoodlet" rel="nofollow">https://github/tgoodlet

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何生成格式化文件。xml文件?   java向Vaadin布局添加模糊侦听器   Java中的默认构造函数内容   java Eclipse错误:“无法找到jre7的可执行文件”   Java8,如何使用流实现switch语句?   java在CDH4示例上运行map reduce作业   java在servlet中获取文件名   如何禁止在所有浏览器中加载脚本“Selenium Java”   java Play框架和gradle   如果DifferencedName有引号,java无法从组中获取成员   java如何在使用链表实现的堆栈中实现pop操作?   java如何在网络视图中全屏制作YouTube视频?   如何在java中为分配的时间或固定的时间执行循环   java如何使用Android SDK在onCreate语句中动态更改活动的背景颜色?   java如何理解客户端没有来自IBM MQ的消息的原因?   java使用表查找用户最多出现的字母   java中的数组多维数据结构   java如何将一个值设置为一个类中的变量,并从另一个类中获取该变量的值?   java在创建新AVD后无法运行Android应用程序   java使用广度优先搜索算法存储迷宫求解路径