欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python脚本-批量修改文件名

程序员文章站 2022-04-18 15:58:11
...

Notice1:os.listdir(path)

filenames = os.listdir(path)
os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。 它不包括 '.' 和'..' 即使它在文件夹中。只支持在 Unix, Windows 下使用。
参数:path需要列出的目录路径
返回值:返回指定路径下的文件和文件夹列表。

Notice2:re.compile 

p = re.compile(OldPartString)
return p.sub(NewPartString,FullString)
正则表达式是一个特殊的字符序列,它能帮助我们方便的检查一个字符串是否与某种模式匹配。re 模块使 Python 语言拥有全部的正则表达式功能。compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。
re.compile(pattern, flags=0)编译正则表达式,返回RegexObject对象,然后可以通过RegexObject对象调用sub()方法。
re.sub(pattern, repl, string, count=0, flags=0)找到 RE 匹配的所有子串,并将其用一个不同的字符串替换。可选参数 count 是模式匹配後替换的最大次数;count 必须是非负整数。缺省值是 0 表示替换所有的匹配。如果无匹配,字符串将会无改变地返回。
相当于一个字符串中进行模式替换。

Notice3:cmp函数 os.rename

if  cmp(filenames[n],ModifiedFilename):
    print ...
    os.rename(path+'\\'+filename[n],path+'\\'+ModifiedFilename)
cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。
os.rename(src, dst);src -- 要修改的目录名;dst -- 修改后的目录名;该方法没有返回值

Notice4:str.find()

str.find(str1, beg=0, end=len(string))
str -- 指定检索的字符串
beg -- 开始索引,默认为0。
end -- 结束索引,默认为字符串的长度。
find() 方法检测字符串中是否包含子字符串 str 1,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。
NewNameInFile = re.sub(oldname,newname,OldNameInFile)

os.remove() ; open(file,'wb')
os.remove() 方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError。在Unix, Windows中有效;
os.remove(path+'\\'+ModifiedFilename)
f_w = open(path+'\\'+ModifiedFilename,'wb')
f_w.write(NewNameInFile)
f_w.close

Notice5:os.getcwd()

os.getcwd() 方法用于返回当前工作目录。

Notice6:Upper()

upper() 方法将字符串中的小写字母转为大写字母。

#!usr/bin/python
import os, sys, re
oldname="SZH"
newname="LLSH"
def  MyReplace(FullString,OldPartString,NewPartString):
    p=re.compile (OldPartString)
    return p.sub(NewPartString,FullString)

def MyFindcxxh(str):
    if str.find('.cxx')==-1 and  str.find('.h')==-1 and str.find('.txt')==-1 and str.find('.ui')==-1  and str.find('.qrc')==-1:
        return -1
    else:
        return 1 

def MyChangeName(path,oldname,newname):
    filenames=os.listdir(path)
    for n in xrange(len(filenames)):
        ModifiedFilename=MyReplace(filenames[n],oldname,newname)
        print filenames[n]
        print ModifiedFilename
        if  cmp(filenames[n],ModifiedFilename):
            print "from file... "+path+"\\"+filenames[n]+" to... "+ModifiedFilename
            os.rename(path+'\\'+filenames[n],path+'\\'+ModifiedFilename)  
        if MyFindcxxh(filenames[n])==1 :
            print 'have found cxx/h/txt...'
            OldNameInFile=open(path+'\\'+ModifiedFilename,'r').read()
            if OldNameInFile.find(oldname)>-1:
                print 'need replacing...'
                NewNameInFile = re.sub(oldname,newname,OldNameInFile)
                print "modifying the file of ..."+path+"\\"+filenames[n]+' contest...'+oldname+' is replaced by '+newname
                os.remove(path+'\\'+ModifiedFilename)
                f_w=open(path+'\\'+ModifiedFilename,'wb')
                f_w.write(NewNameInFile)
                f_w.close()

        npath=path+"\\"+ModifiedFilename
        if os.path.isdir(npath):
           MyChangeName(npath,oldname,newname)

path=os.getcwd()
MyChangeName(path,oldname,newname)