在Python中可以很方便的大量的移动,删除,修改,添加文件
比如:
(1)在一个文件夹甚至许多文件夹中复制扩展名相同的文件
(2)寻找文件名前缀相同的文件,进行相应的删除,修改等操作
(3)将一些文件夹打包到一个文件里(zip文件,或者rar文件)

文章目录

  • 1.1 shutil模块
  • 1.1.1 复制文件和文件夹
  • 1.1.2 文件和文件夹的移动与更改名称
  • 1.1.3 永久删除文件和文件夹
  • 1.1.4 利用send2trash模块安全地删除
  • 1.2 遍历目录树
  • 1.3 用zipfile模块压缩文件
  • 1.3.1 读取zip文件
  • 1.3.2 解压缩zip文件
  • 1.3.3 创建和添加内容到压缩文件

1.1 shutil模块

shutil模块也称为shutil工具,该模块中含有许多函数,可以让文件快速地被移动、复制、删除和修改。通过import shutil来引入shutil模块

1.1.1 复制文件和文件夹

(1)复制文件
通过 shutil.copy(source,destination)可以将 source 处的文件复制到 destination 所代表的目录下,如果 destination 是一个文件名,那么destination所代表的文件名将作为复制文件的新的文件名,该函数将返回一个字符串,该字符串表示复制后的文件路径

python 覆盖旧版本_解压缩


首先通过import 将shutil模块引入,再通过shutil.copy()函数复制文件

(1)将bbc.txt文件复制到yy文件夹下

(2)将bbc.txt文件复制为yy,txt, yy.txt为新的文件名

python 覆盖旧版本_文件名_02


python 覆盖旧版本_文件名_03


python 覆盖旧版本_解压缩_04


(2)复制文件夹

利用函数shutil,copytree(source,destination)来复制文件夹,destination所代表的文件夹名作为被复制的source所代表的文件夹的新名字

python 覆盖旧版本_解压缩_05


python 覆盖旧版本_解压缩_06

1.1.2 文件和文件夹的移动与更改名称

(1)移动文件

shutil.move(source,destination)函数将source所代表的文件移动到destination所代表的目录下,当盘根下没有destination代表的文件时,destination为移动后的文件名,如果目录下已存在所移动的文件名,将会提示已存在

python 覆盖旧版本_文件名_07

下图为磁盘目录下没有bbc的文件夹,所以移动后yy.txt将被bbc所代表的文件名取代

python 覆盖旧版本_压缩文件_08


python 覆盖旧版本_解压缩_09


python 覆盖旧版本_压缩文件_10


python 覆盖旧版本_解压缩_11

(2)更改文件名
虽然不可以覆盖已存在的文件名,但可以指定移动后的文件名

python 覆盖旧版本_解压缩_12


如果移动到文件夹下不存在的文件夹,将变更为不存在的文件夹所代表的文件名,如果三级目录都不存在的话,将抛出异常

python 覆盖旧版本_文件名_13

1.1.3 永久删除文件和文件夹

(1)os.unlink(路径) 删除该路径下的文件
(2)os.rmdir(路径) 如果该路径处的文件夹为空,则删除该文件夹。否则,返回错误
(3)shutil.rmtree(路径) 将删除该路径处的文件夹,该文件夹包含的所有文件和文件夹都将被删除

(1)效果图:如图所示,带.txt后缀的为hb和hc两个文件

python 覆盖旧版本_文件名_14


权限不够,删不了,懒得切换管理员权限了,换一个D盘吧

python 覆盖旧版本_解压缩_15


python 覆盖旧版本_解压缩_16


(2)利用os.rmdir(路径) 删除文件夹(空文件夹)

python 覆盖旧版本_python 覆盖旧版本_17


(3)利用shutil.rmtree(路径) 强制删除文件夹

python 覆盖旧版本_python 覆盖旧版本_18

1.1.4 利用send2trash模块安全地删除

可以安装第三方软件send2trash来进行删除,首先在dos命令行输入

pip install send2trash来进行安装

python 覆盖旧版本_压缩文件_19


python 覆盖旧版本_解压缩_20


send2trash.send2trash()函数来删除文件和文件夹。虽然它将文件发送到垃圾箱,让你稍后能够恢复它们,但是这不像永久删除文件,不会释放磁盘空间。如果你希望程序释放磁盘空间,就要用 os 和 shutil 来删除文件和文件夹。注意,send2trash()函数只能将文件送到垃圾箱,不能从中恢复文件。

1.2 遍历目录树

os.walk()函数被传入一个字符串值,即一个文件夹的路径。你可以在一个 for 循环语句中使用 os.walk()函数,遍历目录树,就像使用 range()函数遍历一个指定范围的数字一样。跟 range()不同,os.walk()在循环的每次迭代中,返回 3 个值:

(1)字符串所代表的当前文件夹名称

(2)字符串所代表的当前文件夹下的所有子文件夹名称

(3)字符串所代表的当前文件夹下的文件名称

当前文件夹,是指 for 循环当前迭代的文件夹。程序的当前工作目录,不会因为 os.walk()而改变。 就像你可以在代码 for i in range(5):中选择变量名称 i 一样,你也可以选择前面列出来的 3 个变量使用自己定义的变量名称。可以使用 foldername(文件夹名字)、subfolders(子文件夹) 和 filenames(文件名)。

迭代类似于环,递归类似于树

python 覆盖旧版本_文件名_21


python 覆盖旧版本_压缩文件_22


python 覆盖旧版本_压缩文件_23

1.3 用zipfile模块压缩文件

zip文件可以包含许多文件夹和文件,它可以将文件大小压缩,便于上传或者作为邮箱的附件来发送,压缩文件利用的原理为将相同的内容压缩为一个,并记录各个相同内容所处的位置。利用zipfile模块中的函数可以打包或解压zip文件,打包后的文件称为归档文件。

1.3.1 读取zip文件

要读取zip文件,首先要创建一个ZipFile对象,然后利用zipfile模块的ZipFile()函数获取zip文件,通过返回的ZipFile对象的namelist()方法来显示zip文件中的压缩文件,进一步通过ZipFile对象的getinfo()方法来获得zip文件中的某一文件的信息来返回一个ZipInfo对象,ZipInfo对象的两个方法,file_size为原有文件的大小,compress_size为压缩后的大小

rand()函数对浮点数进行近似取值,比如 rand(10/3,2)意为取小数点后俩位 小写%s

python 覆盖旧版本_压缩文件_24

1.3.2 解压缩zip文件

利用ZipFile对象的extractall()方法来解压缩zip文件中的所有文件夹和文件,解压缩后的文件将放在当前文件夹中,也可以在extractall()方法中输入一个路径来存放解压后的zip文件,如果该路径下的文件夹不存在,将创建一个该文件夹。比如sampleZip.extractall(‘D:\action’)

解压缩中

python 覆盖旧版本_python 覆盖旧版本_25


解压缩完成

python 覆盖旧版本_解压缩_26


python 覆盖旧版本_文件名_27


python 覆盖旧版本_压缩文件_28


python 覆盖旧版本_压缩文件_29


(2)可以利用ZipFile对象的extract()方法来解压缩zip文件中的单个文件,即namelist()方法所展现的文件,extract()方法可以有一个参数,也可以有俩个参数,如果是单个参数,则用来传入要解压缩的文件。如果是俩个参数,则第一个参数用来传入即将解压缩的文件,第二个参数用来传入放置解压缩文件的文件夹路径,如果指定文件夹不存在,将创建它

解压缩后将返回解压缩后的路径

python 覆盖旧版本_解压缩_30

python 覆盖旧版本_文件名_31

1.3.3 创建和添加内容到压缩文件

要创建你自己的压缩文件,必须以写模式打开文件,即传入参数’a’。如果没有,将创建一个新的文件。如果在已有的压缩文件中添加新的压缩内容,以添加模式打开,即传入关键字’a’。

第一个参数为路径,将压缩该路径下的文件夹和文件;第二个参数为即将操作的模式

注意:写模式将擦除原有zip文件(如果该文件存在)的内容

python 覆盖旧版本_文件名_32


python 覆盖旧版本_文件名_33


也可以添加内容到现有zip文件

python 覆盖旧版本_文件名_34


python 覆盖旧版本_解压缩_35