- 零基础学Python(第2版)
- 黄传禄 张克强 赵越
- 1004字
- 2025-03-22 17:27:13
7.1.6 文件的重命名
os模块的函数rename()可以对文件或目录进行重命名。下面这段代码演示了文件重命名的操作。如果当前目录存在名为hello.txt的文件,则重命名为hi.txt;如果存在hi.txt的文件,则重命名为hello.txt。
01 # 修改文件名 02 import os 03 li = os.listdir(".") 04 print (li) 05 if "hello.txt" in li: 06 os.rename("hello.txt", "hi.txt") 07 elif "hi.txt" in li: 08 os.rename("hi.txt", "hello.txt")
【代码说明】
·第3行代码调用listdir()返回当前目录的文件列表,其中“.”表示当前目录。
·第4行代码输出当前目录包含的文件,rename_file.py是本段程序的文件。输出结果如下所示。
['rename_file.py', 'hello.txt']
·第5行代码判断当前目录中是否存在文件hello.txt。如果存在,则把hello.txt重命名为hi.txt。
·第7行代码判断当前目录中是否存在文件hi.txt。如果存在,则把hi.txt重命名为hello.txt。
在实际应用中,通常需要把某一类文件修改为另一种类型,即修改文件的后缀名。这种需求可以通过函数rename()和字符串查找的函数实现。下面这段代码把后缀名为html的文件修改为以htm为后缀名的文件。
01 # 修改后缀名 02 import os # 导入os模块 03 files = os.listdir(".") 04 for filename in files: 05 pos = filename.find(".") 06 if filename[pos + 1:] == "html": 07 newname = filename[:pos + 1] + "htm" 08 os.rename(filename,newname)
【代码说明】
·第3行代码调用listdir(),返回当前目录的文件列表files。这样可以对当前目录中的多个文件进行重命名。
·第4行代码循环列表files,获取当前目录中的每个文件名。
·第5行代码调用find()查找文件名中“.”所在的位置,并把值赋给变量pos。
·第6行代码判断文件的后缀名是否为html。pos+1表示“.”后的位置。
·第7行代码重新组合新的文件名,以htm作为后缀名。filename[:pos+1]表示从filename的开头位置到“.”这段分片。
·第8行代码调用rename重命名文件。
为获取文件的后缀名,这里先查找“.”所在的位置,然后通过分片filename[pos+1:]截取后缀名。这个过程可以使用os.path模块的函数splitext()实现。splitext()返回1个列表,列表中的第1个元素表示文件名,第2个元素表示文件的后缀名。修改后的代码如下所示。
01 import os 02 files = os.listdir(".") 03 for filename in files: 04 li = os.path.splitext(filename) 05 if li[1] == ".html": 06 newname = li[0] + ".htm" 07 os.rename(filename,newname)
【代码说明】
·第4行代码调用splitext()对文件名进行解析,返回文件名和后缀名组成的列表。
·第5行代码,通过li[1]判断文件是否以html结尾。
·第6行代码重新组合新的文件名,li[0]表示不带后缀的文件名。
glob模块用于路径的匹配,返回符合给定匹配条件的文件列表。glob模块的主要函数就是glob(),该函数返回符合同一匹配条件的多个文件。上面的例程需要判断文件是否为html后缀,也可以使用glob()直接匹配文件名称。
glob.glob("*.html")
【代码说明】该行代码返回html格式的文件。输出结果如下所示。
['hello.html', 'hi.html']
glob可以对路径做更多的匹配。例如,下面这段代码可以匹配C盘中以w开头的目录中所有的文本文件。
glob.glob("c:\\w*\\*.txt")
注意 glob()的参数满足正则表达式的语法。