替换文件中的文本

时间:2013-07-11 17:54:17

标签: python

它非常简单,使用小代码,我可以读取文件并匹配我可以找到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')

提前致谢。

3 个答案:

答案 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的指导。