Pythonファイルを変更して指定行に内容を挿入
6014 ワード
需要:pyファイルのクラス属性を一括変更し、クラスにcore=Trueの新しい属性を追加します.
元のpyファイルは以下のa.pyです.
今1つあります.txtテキスト、内容は以下の通りで、pyファイルのdescriptionがtxtテキストと同じであればcore属性1を増加する.txt
実現構想:1.codeディレクトリの下のすべてのpyファイルを巡回し、すべての行数の内容を読み出してlinesリストに保存する必要があります.各ファイルの各行を巡り、1に一致する.txtのdescriptionは、一致すると行番号3を返す.追加する新しいプロパティをlinesリストに行番号に従って挿入します.元のファイルに書き直して、ファイルを修正する目的を達成する.
修正に成功したら、効果はこのようなa.pyであるべきです.
実装コード:
コードの
a.py
こんなの修正したら
このバグを避けるために、後でhit-1に変更しました.
このようにpyファイルを修正すると、このような効果が得られます.
元の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"