shutil模块之文件操作

351 阅读2分钟

os模块不仅提供了新建文件、删除文件、查看文件属性的操作功能,还提供了对文件路径的操作功能。但是,对于移动、复制、打包、压缩、解压文件及文件夹等操作,os模块没有提供相关的函数,此时需要用到shutil模块。 Python自带的关于文件、文件夹、压缩文件的高层次的操作工具,类似于高级shutil模块是对os模块中文件操作的补充,是API。

1 文件剪切、重命名和覆写操作

shutil.move(src, dst):将指定的文件或文件夹移动到目标路径下,返回值是移动后的文件绝对路径字符串

1.1 文件剪切

如果目标路径指向一个文件夹,那么指定文件将被剪切到目标路径指向的文件夹中,并且保持其原有名字

剪切前:

image-20220515215328748.png

import shutil
​
shutil.move(
    r"D:\workspace\Python_excerise\test_example.txt", 
    "D:\workspace\Python_excerise\data"
)

剪切后:

image-20220515215658893.png

1.2 文件重命名

如果目标路径指向一个具体的文件,则指定的文件在移动后则被重命名。

重命名前:

image-20220515215658893.png

shutil.move(
    r"D:\workspace\Python_excerise\data\test_example.txt",
    r"D:\workspace\Python_excerise\data\change.txt"
)

重命名后:

image-20220515220034830.png

1.3 文件覆写

如果目标路径指向的文件夹中已经有了同名的文件,则目标路径中的文件将被覆写。此时目标路径下的文件必须是已经存在的,否则会返回错误

覆写前的情形

源文件的内容:

image-20220515220558564.png

目标路径文件的内容:

image-20220515220651289.png

shutil.move(
    r"D:\workspace\Python_excerise\change.txt",
    r"D:\workspace\Python_excerise\data\change.txt"
)

覆写后目标路径文件的内容:

image-20220515220815343.png

2 文件复制

shutil.copyfile(src,dst):可以从src文件复制内容(不包含元数据)到dst文件,dst必须是完整的目标文件名,返回值是复制后的文件绝对路径字符串

2.1 复制源文件为其他文件

复制前:

image-20220516200703819.png

shutil.copyfile(
    "D:\workspace\Python_excerise\data\change.txt",
    "D:\workspace\Python_excerise\data\change_bak.txt",
)

复制后:

image-20220516200843917.png

这里要注意以下几点:

(1) 若dst和src是同一文件,则会引发shutil.Error。

(2) dst必须是可写的,否则会引发IOError

(3) 如果dst文件已经存在,则会被替换

(4) 对于特殊文件,比如字符或块设备文件和管道不能使用该功能

2.2 复制原文件到其他目录下

复制前:

image-20220516200703819.png

shutil.copy(
    "D:\workspace\Python_excerise\data\change.txt",
    "D:\workspace\Python_excerise",
)

复制后:

image-20220516201610257.png