文章目录
一、shutil模块
1.文件和文件夹的复制与改名
【01】shutil.copy(source, destination)
将路径source处的文件复制到路径destination处的文件夹;如果destination是一个文件名,它将作为被复制文件的新名字。
import shutil
shutil.copy(r'E:\【05】编程设计\Python\Python自动化办公\测试\文件夹1\hello.txt',
r'E:\【05】编程设计\Python\Python自动化办公\测试\文件夹2')
shutil.copy(r'E:\【05】编程设计\Python\Python自动化办公\测试\文件夹1\hello.txt',
r'E:\【05】编程设计\Python\Python自动化办公\测试\文件夹2\你好.txt') # 复制并改名
也就是通过shutil.copy()函数,我们可以实现单个文件的复制与改名操作。
【02】shutil.copytree(source, destination)
shutil.copy()是复制一个文件,而shutil.copytree()能够复制整个文件夹,包括该文件夹内的所有文件和文件夹。
import shutil
#【01】文件和文件夹的复制与改名
shutil.copytree(r'E:\【05】编程设计\Python\Python自动化办公\测试\文件夹1',
r'E:\【05】编程设计\Python\Python自动化办公\测试\文件夹3') # 实际相当于创建了一个新文件夹
——
2.文件和文件夹的移动与改名
【01】shutil.move(source, destination)
通过使用shutil.move()函数,我们可以实现文件和文件夹的移动与改名。在使用该函数时,要注意以下几点:
- source是文件A,destination是已存在的文件夹B,则将文件A移动到文件夹B下;如果文件夹中存在同名文件,则会被覆盖。
- source是文件A,destination是带路径的文件B,则文件A则会被移动到该路径下并改名为B。
- source是文件A,destination是同目录下的文件B,则文件A改名为文件B。
如果source是文件夹A,则按照以上的套路代入即可,原理都是一样。
import shutil
#【02】文件和文件夹的移动与改名
shutil.move(r'E:\【05】编程设计\Python\Python自动化办公\测试\文件夹3\hello.txt',
r'E:\【05】编程设计\Python\Python自动化办公\测试\文件夹4')
shutil.move(r'E:\【05】编程设计\Python\Python自动化办公\测试\文件夹3\hello.txt',
r'E:\【05】编程设计\Python\Python自动化办公\测试\文件夹4\你好.txt')
shutil.move(r'E:\【05】编程设计\Python\Python自动化办公\测试\文件夹3\hello.txt',
r'E:\【05】编程设计\Python\Python自动化办公\测试\文件夹3\hello.txt')
——
3.永久删除文件和文件夹
利用os模块,我们可以实现删除一个文件或一个空文件夹;但利用shutil模块,我们可以永久(不可逆)地删除一个文件夹及其所有的内容。
- os.unlink(path) 将删除path处的文件(单个)
- os.rmdir(path) 将删除path处的文件夹(空白)
- shutil.rmtree(path) 将删除path处的文件夹,包括包含的所有文件和文件夹
一定要注意的是,shutil.rmtree()会永久地不可逆地删除文件,所以用起来得万分小心。
那有没有更加的删除方法呢?如果我们不小心把需要的文件删除了能够恢复的方法?
有,那就是用send2trash模块进行删除。
——
4.用send2trash模块安全删除
send2trash是第三方模块,它比Python常规的删除函数要安全得多,它会将文件和文件夹发送到计算机的垃圾箱或者回收站,而非永久性删除。
进而我们可以在电脑回收站中选择永久删除或者恢复文件和文件夹。
要使用send2trash,我们首先要进行安装。
打开命令提示符,输入 pip install send2trash
import send2trash
#【04】用send2trash模块安全删除
baconFile = open('bacon.txt','a') # 创建txt文件
baconFile.write('Bacon is not a vegatable') # 文件中写入内容
baconFile.close()
send2trash.send2trash('bacon.txt') # 用send2trash删除文件
二、os.walk()遍历目录树
有些时候我们需要遍历整个文件夹,比如要对某个文件夹中的所有文件夹改名,包括该文件夹下的所有子文件夹中的文件。
这个时候我们就需要用到os.walk()函数,再结合for循环,就能实现遍历目录树的操作。
os.walk(path) 传入一个文件路径的字符串,在循环的每次迭代中会返回3个值。
- 当前文件夹名称的字符串
- 当前文件夹中子文件夹的字符串的列表
- 当前文件夹中文件的字符串的列表
值得重点提醒的是,所谓的当前文件夹指的是for循环当前迭代的文件夹。
import shutil
for folderName, subfolders, filenames in os.walk(r'E:\【05】编程设计\Python\Python自动化办公\【09】组织文件\delicious'):
print('当前文件夹:'+folderName)
print('包含子文件夹:', end='')
for subfolder in subfolders:
print(subfolder, end=' ')
print()
print('包含文件:', end='')
for filename in filenames:
print(filename, end=' ')
print('\n-------------------------------------------')
显示结果
三、zipfile模块
1.读取ZIP文件
对于压缩包里的文件和文件夹,该如何进行操作处理?这里需要使用到zipfile模块。
要读取ZIP文件的内容,首先必须创建一个ZipFile对象。
import zipfile
#【01】读取ZIP文件
exampleZip = zipfile.ZipFile('example.zip') # 创建ZIP对象
print(exampleZip.namelist()) # 返回ZIP中所有文件和文件夹的列表
spamInfo = exampleZip.getinfo('spam.txt') # 获取ZIP的单个内容
print(spamInfo.file_size) # 原文件大小
print(spamInfo.compress_size) # 压缩后文件大小
c_ratio = round(spamInfo.file_size/spamInfo.compress_size, 2) # 计算压缩率
print(c_ratio)
运行代码,看一下结果
总结一下方法和属性:
- zipfile.ZipFile() 创建ZIP对象
- namelist() 返回ZIP文件中所有文件和文件夹的字符串的列表
- getInfo() 返回特定文件的ZipInfo对象
- file_size属性 原文件的大小
- compress_size属性 压缩后文件的大小
- close() 关闭ZIP文件
——
2.解压缩ZIP文件
关于能够解压缩ZIP文件的函数有两个:
- extractall() 从ZIP文件中解压缩所有文件和文件夹
- extract() 从ZIP文件中解压缩单个指定文件
import zipfile, os
#【02】从ZIP文件中解压缩
exampleZip.extractall() # 将所有文件和文件夹解压到当前工作目录中,括号中可指定文件夹名
exampleZip.extract('spam.txt', r'E:\【05】编程设计\Python\Python自动化办公') # 将指定文件解压到指定文件夹(文件夹不存在则创建)
exampleZip.close()
——
3.创建和添加ZIP文件
要创建新的ZIP文件,必须以“写模式”或者“添加模式”打开ZipFile对象,即传入第二参数。
import zipfile, os
#【03】创建和添加到ZIP文件
newZip = zipfile.ZipFile('new.zip','w') # 以"写模式"或者"添加模式"创建,这里'w'表示写模式
newZip.write('spam.txt', compress_type=zipfile.ZIP_DEFLATED) # 第二参数为压缩类型参数,可以总是设置为该值
newZip.close()