Python修改文件往指定行插入内容的实例
需求:批量修改py文件中的类属性,为类增加一个core=True新的属性
原py文件如下
a.py
classA(): description="abc"
现在有一个1.txt文本,内容如下,如果有py文件中的description跟txt文本中的一样,则增加core属性
1.txt
description="abc" description="123"
实现思路:
1.需要遍历code目录下的所有py文件,然后读取所有行数内容保存到lines列表中
2.遍历每个文件的每一行,匹配1.txt中的description,如果匹配中,就返回行号
3.往lines列表中根据行号插入要增加的新属性
4.重新写回原文件,达到修改文件的目的
如果修改成功后,效果应该是这样的
a.py
classA(): description="abc" core=True
实现代码:
importos
original_folder='E:\\code\\'
core_list=[]
count=0
#ifthedescriptionisinthecurrentline
defisMatchDescription(line_buffer):
globalcore_list
#ifnotcatchthecore_listinglobal,reloadit.
ifnotcore_list:
withopen("./core.txt","r")asf:
core_list=f.readlines()
#ifmatchthecoredescription
fordesincore_list:
ifline_buffer.strip()==des.strip():
returnTrue
returnFalse
defmodifySignatures():
fordirpath,dirnames,filenamesinos.walk(original_folder):
forfilenameinfilenames:
modifyFile(os.path.join(dirpath,filename))
defmodifyFile(filename):
globalcount
#print"Currentfile:%s"%filename
lines=[]
withopen(filename,"r")asf:
lines=f.readlines()
hit=0
#Enumeeverysinglelineformatchthedescription
forindex,lineinenumerate(lines):
ifisMatchDescription(line):
hit=index
printhit
print"Matchedfile:%s"%filename
count+=1
ifhit>0:
lines.insert(hit-1,'core=True\n')
f.close()
#Writebacktofile
withopen(filename,"w")asf:
forlineinlines:
f.write(line)
f.close()
if__name__=='__main__':
modifySignatures()
print"Modified:%d"%count
代码中的lines.insert(hit-1,'core=True\n')这一行,hit代表目标py文件的description属性的行号,我之前用的是hit+1,但是后面发现有些文件出现了语法错误,原因是py文件中有些description的值太长,导致原文件使用了代码换行符\,如下:
a.py
classA(): description="abc\ aaaaabbbbb"
这样的如果修改后就变成了
classA(): description="abc\ core=True aaaaabbbbb"
为了避免这个bug,后面我才改成了hit-1
lines.insert(hit-1,'core=True\n')
这样修改的py文件后就是这样的效果
classA(): core=True description="abc\ aaaaabbbbb"
以上这篇Python修改文件往指定行插入内容的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。