论坛首页 编程语言技术论坛

Python递归修改文件夹、文件名、文件内容中的指定字符串

浏览 5614 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-02-05  
最近一直在做XOOPS的模块,老实说,以前没接触过PHP,也没进行过类似的接口开发,什么标准一概不知,时间又紧,写来全是随意,想到哪写到哪。居然还弄了出来。
  可是客户又提了新要求,要求重用模块,就是一个模块装两次用作不同作用,我本来以为蛮简单,试了下才知道,同一模块安装多个在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)
   发表时间:2010-02-21   最后修改:2010-02-21
建议先看看os.path.walk( path, visit, arg) 函数怎么用吧。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics