搜索和编辑python源(.py)文件中的行

时间:2018-09-11 14:56:01

标签: python replace keyword

我想通过关键字匹配在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():
  ...

2 个答案:

答案 0 :(得分:0)

  

是否有框架,工具或其他工具可以做到这一点?

您可以使用Emacs的其他解决方案

FAQ

  

5.37如何跨多个文件执行替换操作?
  Dired模式(M-x dired或C-x d)支持dired-do-find-regexp-and-replace(Q)命令,该命令允许用户替换多个文件中的正则表达式。

答案 1 :(得分:0)

对于这些事情,我提供了replaceinsert函数,您可以针对特定任务执行此操作。另外,您可以使用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