我想通过关键字匹配在python源代码文件(.py)中搜索特定行并编辑找到的行,但是还可以编辑上一行和下一行。所有这些都以编程方式进行,因此我可以使其自动化。
是否有框架,工具或其他工具可以做到这一点?
更具体地说:
我必须修饰方法。我有所有方法及其关联装饰器的列表(我已经将其转换为XML文件)。由于我有500种方法,因此手动进行也将花费大量时间。这就是为什么我想找到一种自动化的方法。
示例:
XML文件
<methods>
<method>
<name>method_1</name>
<decorator>xyz</decorator>
</method>
<method>
...
</methods>
源代码
在自动搜索结束编辑算法之前:
def method_1():
...
算法成功后:
@mark.xyz
def method_1():
...
答案 0 :(得分:0)
是否有框架,工具或其他工具可以做到这一点?
您可以使用Emacs的其他解决方案
从FAQ
5.37如何跨多个文件执行替换操作?
Dired模式(M-x dired或C-x d)支持dired-do-find-regexp-and-replace(Q)命令,该命令允许用户替换多个文件中的正则表达式。
答案 1 :(得分:0)
对于这些事情,我提供了replace
和insert
函数,您可以针对特定任务执行此操作。另外,您可以使用with
来避免必须close
并将其捆绑在其中,说实话,它可以使用更多的重构,但是如果这不能满足您的需求,则不想走得太远。
*添加了if语句,如果您与关键字不匹配并返回错误,则这将阻止整个文件被w
选项擦除。
def find_edit(content, keyword):
for i in range(len(content)):
if content[i] == keyword:
previous_line = i -1
main_line = i
post_line = i + 1
return previous_line, main_line, post_line
def replace(position, replacer):
content[position] = replacer
def insert(position, insertion):
content.insert(position, insertion)
filename = open('something.py', 'r')
content = filename.read().split('\n')
prev, main, post = find_edit(content, 'line 3')
filename.close()
if prev and main and post:
name = open('something.py', 'w')
something = '@mark.xyz'
replace(main, something)
prev, main, post = find_edit(content, 'another_line 2')
insert(post, something)
content = ('\n').join(content)
name.write(content)
name.close()
输出
之前:
(xenial)vash@localhost:~/python/LPTHW$ cat something.py line 1 line 2 line 3 some_line 1 some_line 2 some_line 3 another_line 1 another_line 2 another_line 3
之后:
(xenial)vash@localhost:~/python/LPTHW$ cat something.py line 1 line 2 @mark.xyz some_line 1 some_line 2 some_line 3 another_line 1 another_line 2 @mark.xyz another_line 3