Pythonファイルを変更して指定行に内容を挿入

6014 ワード

需要:pyファイルのクラス属性を一括変更し、クラスにcore=Trueの新しい属性を追加します.
元のpyファイルは以下のa.pyです.
class A():
    description = "abc"

今1つあります.txtテキスト、内容は以下の通りで、pyファイルのdescriptionがtxtテキストと同じであればcore属性1を増加する.txt
description = "abc"
description = "123"

実現構想:1.codeディレクトリの下のすべてのpyファイルを巡回し、すべての行数の内容を読み出してlinesリストに保存する必要があります.各ファイルの各行を巡り、1に一致する.txtのdescriptionは、一致すると行番号3を返す.追加する新しいプロパティをlinesリストに行番号に従って挿入します.元のファイルに書き直して、ファイルを修正する目的を達成する.
修正に成功したら、効果はこのようなa.pyであるべきです.
class A():
    description = "abc"
    core = True

実装コード:
import os

original_folder = 'E:\\code\\'


core_list = []

count = 0

# if the description is in the current line
def isMatchDescription(line_buffer):
    global core_list

    # if not catch the core_list in global, reload it.
    if not core_list:
        with open("./core.txt","r") as f:
            core_list = f.readlines()

    # if match the core description
    for des in core_list:
        if line_buffer.strip() == des.strip():
            return True
    return False



def modifySignatures():
    for dirpath, dirnames, filenames in os.walk(original_folder):
        for filename in filenames:
            modifyFile(os.path.join(dirpath,filename))

def modifyFile(filename):

    global count
    #print "Current file: %s"% filename
    lines = []
    with open(filename,"r") as f:
        lines =  f.readlines()
        hit = 0

        # Enume every single line for match the description
        for index, line in enumerate(lines):
            if isMatchDescription(line):
                hit = index
                print hit
                print "Matched file:%s" % filename
                count+=1
        if hit > 0:
            lines.insert(hit-1,'    core = True
'
) f.close() # Write back to file with open(filename,"w") as f: for line in lines: f.write(line) f.close() if __name__ == '__main__': modifySignatures() print "Modified:%d"%count

コードのlines.insert(hit-1,' core = True
')
行、hitはターゲットpyファイルのdescription属性の行番号を表し、私は以前hit+1を使用していましたが、pyファイルの一部のdescriptionの値が長すぎて、元のファイルがコード変換子\を使用していることがわかりました.以下のようにします.
a.py
class A():
    description = "abc\
    aaaaabbbbb"

こんなの修正したら
class A():
    description = "abc\
    core = True
    aaaaabbbbb"

このバグを避けるために、後でhit-1に変更しました.lines.insert(hit-1,' core = True
')

このようにpyファイルを修正すると、このような効果が得られます.
class A():
    core = True
    description = "abc\
    aaaaabbbbb"