参考https://www.cnblogs.com/xiangsikai/p/7787101.html

os模块提供了对目录或者文件的新建、删除、查看文件属性,还提供了对文件以及目录的路径操作,比如说绝对路径、父目录……  但是文件的操作还应该包含移动、复制、打包、压缩、解压等操作,这些功能os模块没有提供。

而shutil模块则是对文件操作的补充,即移动、复制、打包、压缩、解压等操作。

文件操作

1.只拷贝文件内容:shutil.copyfileobj(fsrc, fdst[, length]),相当于用原文件的内容覆盖目标文件的内容

import shutil
f1=open('a.ini','r')
f2=open('b.ini','w')
shutil.copyfileobj(f1,f2)

原文件要以读的模式打开,目标文件要以写的模式打开

2.拷贝文件:shutil.copyfile(src, dst),相当于创建一个空的目标文件,再把原文件内容覆盖到目标文件

import shutil
shutil.copyfile('a.ini','b.ini')

copyfile不需要打开文件

3.拷贝权限:shutil.copymode(src, dst)

import shutil
shutil.copymode('a.ini','b.ini')

要求目标文件存在

4.拷贝状态信息:shutil.copystat(src, dst),包括创建、访问和修改时间等

import shutil
shutil.copystat('a.ini','b.ini')

5.拷贝文件和权限:shutil.copy(src, dst),即先copyfile再copymode

import shutil
shutil.copy('a.ini','b.ini')

6.拷贝文件和状态:shutil.copy2(src, dst),即先copyfile再copystat

import shutil
shutil.copy2('a.ini','b.ini')

7.移动文件:shutil.move(源文件,指定路径),相当于复制到一个指定路径下并重命名

import shutil
shutil.move('a.ini','/test/b.ini')

 目录操作

1.shutil.copytree(源目录,目标目录),递归复制目录及目录下的文件,状态信息也一并复制了

import shutil
shutil.copytree('test/','test_copy/')
shutil.copytree('test/','test_copy/',shutil.ignore_patterns('*.txt','tmp*'))

copytree加参数shutil.ignore_patterns ('模式')表示忽略符合该条件的文件,即选择性复制

2.shutil.rmtree(目标目录):递归删除目录及目录下的文件

import shutil
shutil.rmtree('test/')

打包与压缩 

1.make_archive(base_name, format, root_dir=' ', base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None)  打包、压缩

整个语句的返回值为压缩或打包后的文件的路径+文件名称(文件名称带有相应格式的后缀)

base_name:压缩、打包后的文件名称,无路径则表示当前路径,如果要保存至指定路径则需要指定路径,此处的文件名称不需加格式后缀,打包或压缩完成后会自动加上

format:压缩或打包的格式,有tar、zip、bztar、gztar等

root_dir:打包时切换到的根路径。也就是说开始打包前,会先执行路径切换,切换到root_dir所指定的路径,默认值为当前路径

base_dir:开始打包的路径。也就是说对base_dir所指定的路径进行打包,默认值为 root_dir

owner和group:创建tar包时使用,默认为用户当前的用户和组

logger: 用于记录日志,通常是logging.Logger对象,可省略

#当前/root目录下,要将/root/tmp/test/目录打包并以gztar格式进行压缩,压缩后名称为test_bak,放置在test相同目录下
import shutil
re=shutil.make_archive('/root/tmp/test_bak','gztar','/root/tmp/test/')
print(re)
#执行结果
/root/tmp/test_bak.tar.gz

#上述语句执行前
ls /root/tmp/test/test|grep test*
test
#上述语句执行后
ls /root/tmp/test/test|grep test*
test   test.tar.gz

2.shutil.unpack_archive(file_name,unpack_path) 解压缩

file_name:需要解包的文件,需要写上文件后缀名

unpack_path :解包后文件存放的位置

参考 https://www.jb51.net/article/135049.htm 感谢

python的shutil模块-文件的移动、复制、打包、压缩、解压等的更多相关文章

  1. Linux_文件打包,压缩,解压

    一.压缩命令 文件格式:*.gz 命令:gzip 文件名 (ps:不能压缩目录,切压缩后不保留原文件) 压缩前 -rw-r--r--. 1 root root 315 Sep 6 21:03 df.t ...

  2. python之shutil模块详解

    shutil模块 -- --High-level file operations  高级的文件操作模块. os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作.比如 ...

  3. C# 压缩 解压 复制文件夹,文件的操作

    命名空间:namespace System.IO.Compression 压缩: //目标文件夹 string fileDirPath = "/Downloads/试题" + us ...

  4. 模块 shutil_zipfile_tarfile压缩解压

    shutil_zipfile_tarfile压缩解压 shutil 模块 高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) #将 ...

  5. .NET使用ICSharpCode.SharpZipLib压缩/解压文件

    SharpZipLib是国外开源加压解压库,可以方便的对文件进行加压/解压 1.下载ICSharpCode.SharpZipLib.dll,并复制到bin目录下 http://www.icsharpc ...

  6. 网卡配置文件详解 用户管理与文件权限篇 文件与目录权限 软连接 tar解压命令 killall命令 linux防火墙 dns解析设置 计划任务crond服务 软件包安装 阿里云 yum源 安装

    Linux系统基础优化及常用命令 Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ...

  7. linux驱动系列之文件压缩解压小节(转)

    转至网页:http://www.jb51.net/LINUXjishu/43356.html Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通 ...

  8. huffman压缩解压文件【代码】

    距离上次写完哈夫曼编码已经过去一周了,这一周都在写huffman压缩解压,哎,在很多小错误上浪费了很多时间调bug.其实这个程序的最关键部分不是我自己想的,而是借鉴了某位园友的代码,但是,无论如何,自 ...

  9. 【.Net Core】ZipFile类--文件的压缩解压

    NuGet引用官网自带的System.IO.Compression.ZipFile; var filename = "测试压缩解压文件"; var path = Directory ...

随机推荐

  1. FreeMaker常用表达式

    1,日期转换 ${data.startDate?string("yyyy-MM-dd HH:mm")} 2,非空检查 当数据为null时,1中日期转换在界面上不会显示异常,但在日志 ...

  2. 要求根据RandomStr.java:使用类型转换生成六位验证字符串,示例程序每次运 行时,都会生成不同的字符串。

    1.程序设计思想验证码 ①定义一个字符串变量来保存随机生成的. ②利用循环产生六位随机数,在产生每一位时将其转换为char类型并写在字符串后面. ③利用对话框显示生成的验证码,并提示用户输入验证码. ...

  3. Dapper基础入门

    Dapper是一个轻量级的ORM.之前最常用的ORM是EF,其实EF底层是Ado.net实现的. 现在基本上已经远离SqlHelper时代了. Dapper是开源的  https://github.c ...

  4. MySQL-UNIQUE

    什么是UNIQUE约束 可以使用 UNIQUE 约束确保在非主键列中不输入重复的值.尽管 UNIQUE 约束和 PRIMARY KEY 约束都强制唯一性,但想要强制一列或多列组合(不是主键)的唯一性时 ...

  5. InstallShield 读注册表函数 RegDBGetKeyValueEx ()执行失败

    注: rtn = RegDBGetKeyValueEx(szKey, szNumName, nvType, svNumValue, nvSize); 调用失败如果这个函数的几个参数没有初始化的值,调用 ...

  6. 笔记 : win8系统中的VM虚拟机的Ubuntu搭建samba服务

    1. 环境准备 (此处使用root超级管理员帐户,执行命令时不用加sudo, 普通帐户需要前面加sudo):  (1)安装好Ubutun虚拟系统后,Ubuntu 的软件源配置文件是 /etc/apt/ ...

  7. SQL Server数据库(时间戳timestamp)类型

    1.公开数据库中自动生成的唯一二进制数字的数据类型. 2.timestamp 通常用作给表行加版本戳的机制. 3.存储大小为 8 个字节. 不可为空的 timestamp 列在语义上等价于 binar ...

  8. struts2实现jQuery的异步交互

    struts2中jQuery的异步交互有两种方式: 1)是利用构造字符串的方式来实现: 使用该方法主要是在服务器端根据前端的请求,返回一个字符串信息,然后前端的jQuery通过解析该字符串信息得到对应 ...

  9. field_automation源码分析

    field_automation主要通过uvm_field_utils_begin和uvm_field_utils_end来加到自己写的class中. uvm_field_utils_begin,在o ...

  10. [6]Windows内核情景分析 --APC

    APC:异步过程调用.这是一种常见的技术.前面进程启动的初始过程就是:主线程在内核构造好运行环境后,从KiThreadStartup开始运行,然后调用PspUserThreadStartup,在该线程 ...