`
brmrk
  • 浏览: 30125 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

阅读更多
最近一直在做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)
分享到:
评论
1 楼 cityyokel 2010-02-21  
建议先看看os.path.walk( path, visit, arg) 函数怎么用吧。

相关推荐

    python cookbook(第3版)

    2.16 以指定列宽格式化字符串 2.17 在字符串中处理html和xml 2.18 字符串令牌解析 2.19 实现一个简单的递归下降分析器 2.20 字节字符串上的字符串操作 第三章:数字日期和时间 3.1 数字的四舍五入 3.2 执行...

    pyufp:ufp 库 python 版本。 各种方便的功能集合

    量化应用于灰度图像更改图像颜色深度从图像边缘提取高频颜色从图像中删除边距通过限制搜索深度递归遍历路径移动文件夹的所有内容以指定格式的字符串获取文件的最后修改时间合并父路径和子路径获取目录中经过过滤的...

    像计算机科学家一样思考Python(第2版).pdf

    内容简介 · · · · · · 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程。贯穿全书的主体是如何思考、设计、开发的方法,而具体的编程语言,只是提供了一个具体场景方便介绍的媒介。 全书共...

    ZFJObsLib主要是通过Python写的混淆工具.zip

    具体功能有方法混淆、属性混淆、类名混淆、添加垃圾代码、自动创建垃圾类、删除注释、修改资源文件Hash值、加密字符串、翻新资源名、模拟人工混淆、混淆文件名、混淆文件目录、混淆词库、混淆日志、映射列表、敏感词...

    RenameDIR.py

    一个实用的综合性数据批量处理程序,批量更改目录名称。包含诸多知识点。 知识点: * 目录操作 * 获取当前程序目录 * 获取目录列表 * 解析文件名,上级目录,扩展名等 * 字符串操作 * 字符串最后一位,去掉最后...

    食蚁兽:食蚁兽-CICD门检查框架

    Anteater是一个开放框架,可防止不必要地合并指定的字符串,文件名,二进制文件,已贬值的函数,登台环境代码/凭据等。可以用正则表达式语法指定的任何内容都可以被食蚁兽发现。 您将完全不想要的内容告诉食蚁兽,...

    Python基础教程(第3版)-201802出版-文字版

    15 1.10.4 长字符串、原始字符串和字节 .......................................... 16 1.11 小结 ....................................................... 21 1.11.1 本章介绍的新函数 ................... 21 ...

    精通正则表达式~~~

    字符串,字符编码和匹配模式... 101 作为正则表达式的字符串... 101 字符编码... 105 正则模式和匹配模式... 110 常用的元字符和特性... 113 字符表示法... 115 字符组及相关结构... 118 锚点及其他“零长度...

    疯狂JAVA讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

Global site tag (gtag.js) - Google Analytics