高级的 文件、文件包、压缩包 处理模块   参考Python之路【第四篇】:模块     #src是原文件名,fdst是新文件名

shutil.copyfileobj(fsrc, fdst[, length])  

#将文件内容拷贝到另一个文件中

import shutil #后面是新创建的文件,每次读len的长度,直到读完
shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'),len)

shutil.copyfile(src, dst)

#拷贝文件

shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在

shutil.copymode(src, dst)

#仅拷贝权限,内容、组、用户均不变  e.g 之前是只读的权限,拷贝完,还是只读的权限

shutil.copymode('f1.log', 'f2.log') #目标文件必须存在

shutil.copystat(src, dst)

#仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

shutil.copystat('f1.log', 'f2.log') #目标文件必须存在

shutil.copy(src, dst)

#拷贝文件和权限

import shutil
shutil.copy('f1.log', 'f2.log')

shutil.copy2(src, dst)

#拷贝文件和状态信息

import shutil
shutil.copy2('f1.log', 'f2.log')

shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)

#递归的拷贝文件夹     symlinks是文件软链接,相当于小名,默认不copy

import shutil
shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
#目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是括号里的文件不copy

shutil.rmtree(path[, ignore_errors[, onerror]])
#递归的去删除文件      ignore_errors是忽略错误

import shutil
shutil.rmtree('folder1')

shutil.move(src, dst)
#递归地移动文件,它类似mv命令,其实就是重命名,相当于剪切。

import shutil
shutil.move('folder1', 'folder3')

shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar

  • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,

如:data_bak            =>保存至当前路径,文件名为 data_bak
如:/tmp/data_bak    =>保存至/tmp/,文件名为 data_bak

  • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
  • root_dir: 要压缩的文件夹路径(默认当前目录)
  • owner: 用户,默认当前用户
  • group: 组,默认当前组
  • logger: 用于记录日志,通常是logging.Logger对象
#将 /data 下的文件打包放置当前程序目录
import shutil
ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data') #将 /data下的文件打包放置 /tmp/目录,在linux命令程序框里才能找到
import shutil
ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
zipfile压缩&解压缩

import zipfile

# 压缩,只压缩了同名文件,压缩后的文件为空
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close() # 解压,会解压到当前路径下
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall(path='.')
z.close()

tarfile打包&解打包,打包是找个东西装起来,大小是不变的

import tarfile

# 打包
>>> t=tarfile.open('/tmp/egon.tar','w')
>>> t.add('/test1/a.py') #会把路径所写的所有文件夹全部一起打包
>>> t.add('/test1/b.py',arcname='b.bak') #只打包文件,打包的文件夹名字为 b.bak
>>> t.close() # 解除打包
>>> t=tarfile.open('/tmp/egon.tar','r')
>>> t.extractall('/egon')
>>> t.close()

Python全栈之路----常用模块----shutil模块的更多相关文章

  1. Python全栈之路----常用模块----hashlib加密模块

    加密算法介绍 HASH       Python全栈之路----hash函数 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列 ...

  2. Python全栈之路----常用模块学习----模块的种类和导入方法

    什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码 ...

  3. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

  4. Python全栈之路----常用模块----软件开发目录规范

    目录基本内容 log  #日志目录 conf  #配置目录 core/luffycity  #程序核心代码目录  #luffycity 是项目名,建议用小写 libs/modules  #内置模块 d ...

  5. Python全栈之路----常用模块----re 模块

    正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是 re. re的匹配语法有以下几种 re.match 从头开始匹配 re.search 匹配包含 re.fin ...

  6. Python全栈之路----常用模块----logging模块

    很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...

  7. Python全栈之路----常用模块----subprocess模块

    我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python ...

  8. Python全栈之路----常用模块----datetime模块详解

    相比于time模块,datetime模块的接口则更直观,更容易调用. datetime模块定义了下面这几个类: datetime.date:表示日期的类,常用的属性有year,month,day: d ...

  9. Python全栈之路----常用模块----xml处理模块

    xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的 ...

随机推荐

  1. AS3.0 给addEventListener里的方法加上参数传递

    方法一:for(var i:int=1;i<=4;i++){this["btn"+i].addEventListener(MouseEvent.CLICK,EventUp(b ...

  2. js 浏览器判断

    获取浏览器类型 function getBrowser() { var userAgent = navigator.userAgent //取得浏览器的userAgent字符串 var isOpera ...

  3. 使用MobaXterm远程连接Ubuntu,启动Octave,界面不能正常显示

    使用MobaXterm远程连接Ubuntu,启动Octave,界面不能正常显示,键盘输入无法显示,解决方法如下. 在启动octave之前,输入这两个命令: export GTK_MODULES=gai ...

  4. java 8 Lambda

    警告: 初学者随笔, 请关闭此网页, 以免浪费你的时间

  5. 复仇之路——我一定要学会linux系统

    说起linux,我不知道大家对这几个字母有什么认识,是不是早已经对这个操作系统已经很熟悉了?还是不知道他是一个操作系统,只是知道他是一个英文单词?或是知道他是一个人的名字?亦或是一本叫做<Lin ...

  6. Python爬虫入门之正则表达式

    在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的 ...

  7. openssl 检测链路完整

    D:\openssl\bin>openssl s_client -connect www.xxxx.com:443

  8. Python入门学习例子——从Hao123获取图片

    import urllib.requestimport re #获取html页面内容def getHtml(url): data=urllib.request.urlopen(url) pageCon ...

  9. Java虚拟机学习-Java内存区域(一)

    Java虚拟机内存划分为以下几个区域: 1.方法区:方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据.虽然Java虚拟机规范把方法区描述为 ...

  10. ImitateUCM项目启动Tomcat的过程

    启动各种报错:什么source not found ....然而解决后发现都不是问题关键 下面我讲下我的理解(也许这也不是关键,但是通过该这些,我的问题解决了) (1)重新部署Tomcat时,要同步更 ...