它非常简单,使用小代码,我可以读取文件并匹配我可以找到musicStyle字段的位置,并将值替换为其他内容并在文件上写入更改。它是一个xml,我知道我可以使用lxml或其他xml解析器,但我想继续使用re模块,因为它不是很大,它是我个人的音乐收藏数据库。
import re
def replace(theFile):
#for iLine in (line.rstrip('\n') for line in open(theFile,"w")):
if iLine.find("musicStyle") >= 0:
mpr = re.search(r'(.*>)(.*?)(<.*)', iLine, re.M|re.I)
print mpr.group(2)
# here goes the code to replace the mpr.group(2)
# should i use iLine.replace('rock','Metal') ?
if __name__ == '__main__':
replace('c:\testfile.xml')
提前致谢。
答案 0 :(得分:2)
如果您尝试修改同一文件,请使用fileinput
模块:
import fileinput
for iLine in filinput.input(r'c:\testfile.xml',inplace = True):
if iLine.find("musicStyle") >= 0:
mpr = re.search(r'(.*>)(.*?)(<.*)', iLine, re.M|re.I)
#modify iLine here
print iLine #write the line to the file
请注意,当您使用Windows路径时,请始终使用原始字符串,否则会发生这种情况:
>>> print 'c:\testfile.xml'
c: estfile.xml #'\t' converted to tab space
>>> print r'c:\testfile.xml' #raw string works fine
c:\testfile.xml
答案 1 :(得分:0)
老实说,最好的办法是将输出写入单独的临时文件,然后移动文件代替原始文件。
答案 2 :(得分:0)
我能够解决它:
import re
def replace(theFile):
for line in fileinput.input(theFile,inplace=1):
if line.find("musicStyle") >= 0:
mpr = re.search(r'(.*>)(.*?)(<.*)', line, re.M|re.I)
line = line.replace("rock","metal")
print line,
if __name__ == '__main__':
replace('c:\\testfile.xml')
我必须在行上加上逗号,以避免文件中出现新行。
感谢Ashwini的指导。