Python shutil模块 | 8月更文挑战

玩转Python

这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战python

✰ 回顾复习

咱们在前面已经学习了对文件操做的os模块,对文件路径操做的os.path模块shell

Python文件操做模块

本期,咱们继续学习关于文件的Python模块—shutil。安全

(#^.^#),学习shutil模块能够对文件及文件夹压解缩、移动、拷贝等高级的操做markdown

✧1.shutil模块概述

shutil模块顾明思议sh + util,shell工具的意思,shutil模块有以下特色app

  • python标准库中提供的,主要用来作文件和文件夹的拷贝、移动、删除等
  • 支持文件和文件夹的压缩、解压缩操做
  • shutil模块对os模块提供的对目录或文件的通常操做进行了补充,提供移动、复制、压缩、解压等操做,属于高级的文件操做模块

💻注意ide

shutil模块提供的拷贝文件也是不能拷贝文件的元数据。 (元数据:文件的大小与修改日期等信息。)工具

  • 在Linux系统上,拷贝源文件以后将丢失全部者和组以及安全数据
  • 在MAC OS系统上,文件操做记录和其余元数据都不能使用,拷贝的文件建立者等信息会被丢失,致使显示信息不许确
  • 在window系统上,拷贝的文件不拷贝文件全部者、ACL和替代数据流

✧2. 目录文件操做

shutil模块提供了os模块对文件没有的拷贝、移动。经常使用的方法以下:post

方法 做用
shutil.copyfileobj(fsrc,fdst[length=16*1024]) 将文件内容拷贝到另外一个文件中,能够指定大小的内容
shutil.copyfile(src,dst) 拷贝文件
shutil.copymode(src,dst) 仅拷贝权限。内容、组、用户均不变
shutil.copystat(src,dst) 仅拷贝状态的信息,
包括:mode bits, atime, mtime, flags
shutil.copy(src,dst) 拷贝文件和权限
shutil.copy2(src,dst) 拷贝文件和状态信息
shutil.ignore_patterns(*patterns) 递归的复制文件内容及状态信息,ignore的意思是排除
shutil.copytree(src,dst,symlinks=False,ignore=None,ignore=None) 拷贝软链接
shutil.rmtree(path[,ignore_errors[,onerror]]) 递归删除文件
shutil.move(src,dst) 递归的去移动文件,它相似mv命令,其实就是重命名。

🌟shutil.copyfile(src,dst)学习

拷贝文件📃;能够指定文件的大小。ui

注意:是src和dst必须是文件,不能够是目录 不然会报IOError: [Errno 13] Permission denied:

咱们来实现一下,从A文件夹下的文件批量复制到B文件夹下

import shutil
import os

def copyfile():

    filefolds = os.listdir('./old')
    print("old文件夹里文件:",filefolds)
    i = 0
    for file in filefolds:
        i = i+1
        new_name = "New/"+"New"+str(i)+"_test"+'.txt'
        print(new_name)
        filename = "old/"+file+"/test.txt"
        shutil.copyfile(filename, new_name)
copyfile()
复制代码

批量复制文件运行结果

🌟 shutil.copytree(src,dst,symlinks=False,ignore=None,ignore=None)

递归复制目录及子目录的文件和状态信息 注意:

  • src: 源目录(须要拷贝的内容地址)
  • dst:若是存在的话,是不可覆盖的;,不然会报WindowsError: [Error 183]
  • symlinks:指定是否复制软连接。当心陷入死循环
  • ignore:指定不参与复制的文件,其值应该是一个ignore_patterns()方法
  • cpoy_founction:指定复制的模式
import os
import shutil

# 切换到F:\JueJin目录下
os.chdir(r"F:\JueJin")

shutil.copytree("./old/old0_test","./New3")

print("dst目录下的文件:",os.listdir("./New3"))
复制代码

copytree运行结果

✧3. 解压缩操做

shutil模块也提供了对文件📃和文件夹📁打包、压缩、解压缩操做,常见方法以下:

方法 做用
shutil.make_archive(base_name,format[,root_dir[,base_dir[]]]) 建立一个归档文件(例如 zip 或 tar)并返回其名称
shutil.get_archive_formats() 返回支持的归档格式列表
shutil.register_archive_format(name,funvtion[,extra_args[,description]]) 为name格式注册一个归档程序

ps: shutil模块支持压缩、解压操做底层是依赖zipfile模块和tarfile模块

🌟shutil.make_archive(base_name,format[,root_dir[,base_dir[...]]])

base_name:压缩打包后的文件名或者路径名 format:压缩或者打包格式“zip”,"tar","bztar"or"gztar" root_dir: 将哪一个目录或者文件打包(也就是源文件)

makearchivefile("./old","./old/old0_test")
复制代码

生成压缩包

✍总结

本期,咱们学习shutil模块对os模块对文件操做进行补充,重点有两点

  • 对文件支持拷贝、移动、删除操做
  • 能对文件及文件夹进行压缩和解压缩

咱们在须要是要对文件进行拷贝移动及压缩解压缩等操做,能够借助Python里面的shutil模块来为咱们服务,提升咱们解决问题的速度~

以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心

相关文章
相关标签/搜索