内容正文:
任务6.2 文件批量操作
批量修改文件名
6.2 文件批量操作——批量修改文件名
【任务描述】
老师在上课过程中,经常通过电子教室管理软件发送和收取学生作业,但收上来的学生作业文件,文件名上会自动添加标识信息,如“01陈悦.docx”提交后变为“S21_01陈悦.docx”,这给老师的排序、整理工作带来不便。老师请小T帮忙编写Python程序,自动去掉文件名上添加的标识信息。
6.2 文件批量操作——批量修改文件名
【任务分析】
要解决老师遇到的问题,需要对文件名进行重命名操作。Python提供了os模块和shutil模块实现对文件和目录的删除、重命名等各种操作功能。在掌握和熟悉这些操作之后,我们就能很容易地帮助老师实现文件批量重命名了。
6.2 文件批量操作——批量修改文件名
6.2.1 文件管理
6.2.2 目录管理
6.2.3 任务实现——批量修改文件名
6.2.2 目录管理
1.创建目录
在 os 模块中有两个函数可以实现目录的创建,分别是mkdir()函数和makedirs()函数。os.mkdir()函数用于创建单个目录,语法格式如下:
其中,参数path为字符串,表示要创建的目录的路径,如果指定的目录已经存在,则报错。
6.2.2 目录管理
os.mkdir(path)
根据数据的逻辑存储结构,文件可分为文本文件和二进制文件。文本文件是指以单一特定字符编码形式存储数据的文件。如按照UTF-8编码格式组织的文件。我们常见的.txt文档,.py的python源代码文件都是文本文件。
二进制文件:没有统一的字符编码,按照预定义的格式组织数据。如可执行程序、图形、图像、声音等文件都是二进制文件。
6.2.2 目录管理
例:使用mkdir()创建目录d:/python。
【例6-17】创建目录。
import os
os.mkdir('d:/python')
2.重命名目录
与重命名文件一样,重命名目录也是通过调用os模块中的rename()函数实现的,其语法格式如下:
6.2.2 目录管理
os.rename(原目录, 目标目录)
根据数据的逻辑存储结构,文件可分为文本文件和二进制文件。文本文件是指以单一特定字符编码形式存储数据的文件。如按照UTF-8编码格式组织的文件。我们常见的.txt文档,.py的python源代码文件都是文本文件。
二进制文件:没有统一的字符编码,按照预定义的格式组织数据。如可执行程序、图形、图像、声音等文件都是二进制文件。
6.2.2 目录管理
例:使用rename()函数将d盘下的python目录更名为java。
【例6-18】文件夹重命名。
import os
os.rename('d:/python','d:/java')
3.获取和更改当前目录
使用os.getcwd()函数可以获取当前工作目录,其语法格式如下:
getcwd()函数不带参数,返回表示当前工作目录的字符串。
6.2.2 目录管理
os.getcwd()
os.chdir(path)
如果需要更改当前工作目录,则可以使用os.chdir()函数,其语法格式如下:
其中,path参数表示要切换的目标工作目录,如果目标工作目录不存在,则报错。
根据数据的逻辑存储结构,文件可分为文本文件和二进制文件。文本文件是指以单一特定字符编码形式存储数据的文件。如按照UTF-8编码格式组织的文件。我们常见的.txt文档,.py的python源代码文件都是文本文件。
二进制文件:没有统一的字符编码,按照预定义的格式组织数据。如可执行程序、图形、图像、声音等文件都是二进制文件。
6.2.2 目录管理
例:使用chdir()函数将当前目录更改为d:/python。
【例6-19】更改当前目录。
import osos.chdir('d:/python') #更改当前工作目录为’d:/python’os.getcwd() #获取当前工作目录
4.获取目录内容
使用os模块中的listdir()函数获得指定目录中的文件和目录内容,其语法格式如下:
其中,参数path指定要获得目录内容的路径,函数返回结果为内容列表。
6.2.2 目录管理
os.listdir(path)
根据数据的逻辑存储结构,文件可分为文本文件和二进制文件。文本文件是指以单一特定字符编码形式存储数据的文件。如按照UTF-8编码格式组织的文件。我们常见的.txt文档,.py的python源代码文件都是文本文件。
二进制文件:没有统一的字符编码,按照预定义的格式组织数据。如可执行程序、图形、图像、声音等文件都是二进制文件。
6.2.2 目录管理
例:使用listdir()函数获取目录d:/python下的内容列表。
【例6-20】获取目录内容。
import os
os.listdir('d:/python')
['chapter4', 'chapter5', 'chapter6', 'chapter7', 'chapter8', 'test.txt']
5.复制目录
使用shutil模块中的copytree()函数可以实现目录的复制,其语法格式如下:
6.2.2 目录管理
shutil.copytree(源目录,目标目录)
该函数返回目标目录字符串。
如果指定的目标目录已经存在,则报错。
根据数据的逻辑存储结构,文件可分为文本文件和二进制文件。文本文件是指以单一特定字符编码形式存储数据的文件。如按照UTF-8编码格式组织的文件。我们常见的.txt文档,.py的python源代码文件都是文本文件。
二进制文件:没有统一的字符编码,按照预定义的格式组织数据。如可执行程序、图形、图像、声音等文件都是二进制文件。
6.2.2 目录管理
例:使用copytree()函数将目录d:\python复制到e:\python下。
【例6-21】复制目录。
import shutil
shutil.copytree('d:\python','e:\python')
'e:\\python'
6.删除目录
删除空目录,可以使用os模块中的rmdir()函数,其语法格式如下:
6.2.2 目录管理
os.rmdir(目录路径)
指定删除的目录必须是空目录,即目录中不包含文件或子目录,否则报错。
根据数据的逻辑存储结构,文件可分为文本文件和二进制文件。文本文件是指以单一特定字符编码形式存储数据的文件。如按照UTF-8编码格式组织的文件。我们常见的.txt文档,.py的python源代码文件都是文本文件。
二进制文件:没有统一的字符编码,按照预定义的格式组织数据。如可执行程序、图形、图像、声音等文件都是二进制文件。
6.2.2 目录管理
例:使用rmdir()函数删除空目录d:/python/chapter8。
【例6-22】删除空目录。
import os
os.rmdir('d:/python/chapter8')
6.删除目录
删除一个非空目录及其所包含的文件和子目录,则需要用到shutil模块中的rmtree()函数,其语法格式如下:
6.2.2 目录管理
shutil.rmtree(目录路径)
根据数据的逻辑存储结构,文件可分为文本文件和二进制文件。文本文件是指以单一特定字符编码形式存储数据的文件。如按照UTF-8编码格式组织的文件。我们常见的.txt文档,.py的python源代码文件都是文本文件。
二进制文件:没有统一的字符编码,按照预定义的格式组织数据。如可执行程序、图形、图像、声音等文件都是二进制文件。
6.2.2 目录管理
例:使用rmtree()函数删除非空目录d:/python/。
【例6-23】删除非空目录。
import shutil
shutil.rmtree('d:/python/')
6.2.2 目录管理
函数 说明
os.listdir(path) 获得指定目录中文件和目录内容,返回结果为内容列表
shutil.copytree(src, dst) 复制目录,如果目标目录已经存在,则报错
os.rmdir(path) 删除空目录
shutil.rmtree(path) 删除非空目录
os.path.exists(path) 路径存在则返回True,路径损坏返回False
os.path.isfile(path) 判断路径是否为文件
os.path.isdir(path) 判断路径是否为目录
os.path.getsize(path) 获取文件大小,单位为字节
python中对文件、目录操作时,常用到的os模块和shutil模块中的函数。
即学即答:
改变当前目录的函数是( )。
A.chdir() B.mkdir()
C.remove() D.listdir()
6.2.3 任务实现——批量修改文件名
6.2.3 任务实现——批量修改文件名
【任务描述】
老师在通过电子教室管理软件收取学生作业文件时,文件名自动添加了主机名,如“01陈悦.docx”提交后变为“S21_01陈悦.docx”,如图6-5所示。这给老师整理文件带来不便,编写程序来自动去除文件名中的主机名部分,修改后的文件名如图6-6所示。
图6-5 修改前的文件名 图6-6 修改后的文件名
6.2.3 任务实现——批量修改文件名
【任务分析】
通过学习文件和目录操作,我们知道通过文件重命名的方法来实现文件名的修改。观察要修改的文件名,只要截取“_”后的内容作为新的文件名,就能实现批量修改文件名的目标,步骤如下:
(1)读取作业文件夹下所有文件的文件名。
(2)截取文件名内容,生成新文件名。
(3)重命名文件。
6.2.3 任务实现——批量修改文件名
【例6-24】任务实现:批量修改文件名。
import osfloder = input('请输入文件目录:')if os.path.isdir(floder): os.chdir(floder) # 将文件目录设为当前目标namelist = os.listdir() # 获取所有文件名count = 0for name in namelist: i = name.find("_") if i != -1: newname = name[i+1::] # 截取文件名 os.rename(name,newname) # 文件重命名 count += 1print("修改%d个文件。"%(count))
文件和目录管理涉及的函数较多,这里只介绍了常用的一些函数。要掌握这些函数的使用,还需要多在实践中练习。这里有一个操作示例:编写函数,获取目录的大小。我们来看看如何完成。
$$