浏览 5614 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-05
可是客户又提了新要求,要求重用模块,就是一个模块装两次用作不同作用,我本来以为蛮简单,试了下才知道,同一模块安装多个在xoops中是有专有叫法的,这个叫法就是模块克隆。我本以为数据库表名改掉,模板文件名改掉就好了,可是改完才发现不行。不知什么地方还有冲突。 网上查了下,一般都是手动改,可是一个模块十几个文件夹,每个文件夹下又有1-20个不等的文件,每个php文件中几十到几百行不等,说不定还有文件夹,改来实在费劲。 于是用python写了个小程序来跑,目的就是递归修改文件夹名、文件名、文件内容中的指定字符串,用新的去重写。写完试了下,成功。 针对特殊用途,所以文件内容只支持文本格式 import os import re def _rename(old,new): new2='' for i in range(0,len(new),2): a=new[i:i+2] if a!='\xa1@': new2+=a; print 'new name =',new2 print 'old name =',old if new2!=old: print 'begin to rename',old,new2 try: os.rename(old,new2) except WindowsError,e: if str(e)=='[Error 183] ': print 'already have ',new2 else: print str(e) def excuepath(p,oldname,newname): #传递路径及两个字符串作为参数 workdir=p os.chdir(workdir) cwd=os.getcwd() dirs=os.listdir(cwd) old=oldname new=newname for tmp in dirs: path=os.path.join(cwd,tmp) print 'path=',path #如果是文件,修改内容后重命名 if os.path.isfile(path): #自己内部的字符串不要替换 if tmp[-3:]!='.py': data = open(path).read() #print data data = re.sub(old,new, data) open(path, 'wb').write(data) newpath=path.replace(old,new) _rename(path,newpath) #如果是路径,重命名后递归 elif os.path.isdir(path): newpath=path.replace(old,new) _rename(path,newpath) excuepath(newpath,old,new) if __name__=='__main__': old='someString' new='newString' excuepath(os.path.abspath('.'),old,new) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-02-21
最后修改:2010-02-21
建议先看看os.path.walk( path, visit, arg) 函数怎么用吧。
|
|
返回顶楼 | |