pythonファイルを行単位で読み込み、一部を置き換えます
1472 ワード
問題:一部のライブラリのバージョンの問題で、クラスの属性やクラス名が変更されることが多いため、変更する必要があります.この問題が一般的で、発生回数が多い場合は、スクリプトで操作する必要があります.
処理の考え方まずファイルをバックアップします. その後、読み取りモードでファイルを開き、行ごとに文字列が含まれているかどうかを判断し、文字列の置換を行い、ファイルを閉じます. ファイルを書き込みモードで開き、行ごとに書き込めばいいです.
今、一つのケースを記録します.
ここで注意しなければならないのは、コマンドラインがファイルをコピーする操作を呼び出すため、プロセスが使用されていることです.そのため、このプロセスの実行が完了してから、後の内容を実行する必要があります.そうしないと、ソースファイルをバックアップしていません.エラーが発生したら、後悔します.
まとめ:
pythonスクリプト言語の利点を柔軟に運用することで、作業効率を迅速に向上させ、いくつかの重複作業に対して、スクリプトを利用して私たちをよく助けることができます.
処理の考え方
今、一つのケースを記録します.
import os
from multiprocessing import Process
#----first backup the file
filename=r'F:\ohem\tools\..\lib\roi_data_layer\layer.py'
_str = 'param_str_'
_str_new = 'param_str'
lenth = len(_str)
all_line=[]
def copyfile(file):
cmd = 'copy '+file+" "+file+".bak"
res=os.popen(cmd)
if __name__ == '__main__':
# , ,
Process(target=copyfile(filename)).start()
f = open(filename,'r')
line = f.readline()
while line:
index = line.find(_str)
if index!=-1:
print(index)
print(line[index:index+lenth])
line=line.replace(_str,_str_new)
print(line)
all_line.append(line)
line = f.readline()
#print(all_line)
f.close()
f1 =open(filename,'w')
for line in all_line:
f1.write(line)
f1.close()
ここで注意しなければならないのは、コマンドラインがファイルをコピーする操作を呼び出すため、プロセスが使用されていることです.そのため、このプロセスの実行が完了してから、後の内容を実行する必要があります.そうしないと、ソースファイルをバックアップしていません.エラーが発生したら、後悔します.
まとめ:
pythonスクリプト言語の利点を柔軟に運用することで、作業効率を迅速に向上させ、いくつかの重複作業に対して、スクリプトを利用して私たちをよく助けることができます.