python实现文件名批量替换和内容替换

指定文件夹,指定文件类型,替换该文件夹下全部文件的内容。

注意在window下的读写内容需要指定编码,还需要在文件头指定#coding:utf-8 编码,避免出现编码问题。

代码如下:

#coding:utf-8 import osimport os.path

path=’.’oldstr=’.php’newstr=’.html’

for (dirpath, dirnames, filenames) in os.walk(path): for file in filenames: if os.path.splitext(file)[1]==’.html’: print(file) filepath=os.path.join(dirpath,file) try: text_file = open(filepath, “r”) lines = text_file.readlines() text_file.close() output = open(filepath,’w’,encoding= ‘utf-8’) for line in lines: #print(line) if not line: break if(oldstr in line): tmp = line.split(oldstr) temp = tmp[0] + newstr + tmp[1] output.write(temp) else: output.write(line) output.close() except exception: print(exception) break

这个示例可以批量替换文件名和内容

代码如下:

#!/usr/bin/env python# -*- coding: utf-8 -*-import os, redef multi_replace(text, adict): rx = re.compile(‘|’.join(map(re.escape, adict))) def xlat(match): return adict[match.group(0)] return rx.sub(xlat, text)def batrename(curdir, pairs): for fn in os.listdir(curdir): newfn = multi_replace(fn, pairs) if newfn != fn: print(“renames %s to %s in %s.” % (fn, newfn, curdir)) os.rename(os.path.join(curdir, fn), os.path.join(curdir, newfn)) file = os.path.join(curdir, newfn) if os.path.isdir(file): batrename(file, pairs) continue text = open(file).read() newtext = multi_replace(text, pairs) if newtext != text: print(“renames %s.” % (file,)) open(file, ‘w’).write(newtext)if __name__==”__main__”: while true: oldname = raw_input(“old name: “) newname = raw_input(“new name: “) if oldname and newname: batrename(os.path.abspath(‘.’), {oldname:newname}) else: break