os模块不仅提供了新建文件、删除文件、查看文件属性的操作功能,还提供了对文件路径的操作功能。但是,对于移动、复制、打包、压缩、解压文件及文件夹等操作,os模块没有提供相关的函数,此时需要用到shutil模块。 Python自带的关于文件、文件夹、压缩文件的高层次的操作工具,类似于高级shutil模块是对os模块中文件操作的补充,是API。
1 文件剪切、重命名和覆写操作
shutil.move(src, dst):将指定的文件或文件夹移动到目标路径下,返回值是移动后的文件绝对路径字符串
1.1 文件剪切
如果目标路径指向一个文件夹,那么指定文件将被剪切到目标路径指向的文件夹中,并且保持其原有名字
剪切前:
import shutil
shutil.move(
r"D:\workspace\Python_excerise\test_example.txt",
"D:\workspace\Python_excerise\data"
)
剪切后:
1.2 文件重命名
如果目标路径指向一个具体的文件,则指定的文件在移动后则被重命名。
重命名前:
shutil.move(
r"D:\workspace\Python_excerise\data\test_example.txt",
r"D:\workspace\Python_excerise\data\change.txt"
)
重命名后:
1.3 文件覆写
如果目标路径指向的文件夹中已经有了同名的文件,则目标路径中的文件将被覆写。此时目标路径下的文件必须是已经存在的,否则会返回错误
覆写前的情形
源文件的内容:
目标路径文件的内容:
shutil.move(
r"D:\workspace\Python_excerise\change.txt",
r"D:\workspace\Python_excerise\data\change.txt"
)
覆写后目标路径文件的内容:
2 文件复制
shutil.copyfile(src,dst):可以从src文件复制内容(不包含元数据)到dst文件,dst必须是完整的目标文件名,返回值是复制后的文件绝对路径字符串
2.1 复制源文件为其他文件
复制前:
shutil.copyfile(
"D:\workspace\Python_excerise\data\change.txt",
"D:\workspace\Python_excerise\data\change_bak.txt",
)
复制后:
这里要注意以下几点:
(1) 若dst和src是同一文件,则会引发shutil.Error。
(2) dst必须是可写的,否则会引发IOError
(3) 如果dst文件已经存在,则会被替换
(4) 对于特殊文件,比如字符或块设备文件和管道不能使用该功能
2.2 复制原文件到其他目录下
复制前:
shutil.copy(
"D:\workspace\Python_excerise\data\change.txt",
"D:\workspace\Python_excerise",
)
复制后: