Python之路(第十八篇)shutil 模块、zipfile模块、configparser模块

一、shutil 模块

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

将文件内容拷贝到另一个文件中,需要打开文件

  import shutil
  shutil.copyfileobj(open("old_test.txt","r"),open("new_test.txt","w"))

  

输出结果

2、shutil.copyfile(src,dst)

复制文件内容到另外一个文件,不需要打开文件,事实上,copyfile调用了copyfileobj

  
  import shutil
  shutil.copyfile("old_test.txt","new.txt")

  

输出结果

3、shutil.copymode(src,dst)

仅copy权限,不更改文件内容,组和用户。

  
  import shutil
  shutil.copymode("old_test.txt","new.txt")

  

输出结果

4、shutil.copystat(src, dst)

仅拷贝权限。内容、组、用户均不变

  
  import shutil
  shutil.copystat("old_test.txt","new.txt")

  

输出结果

5、shutil.copy(src, dst)

拷贝文件和权限

  
  import shutil
  shutil.copy("old_test.txt","new.txt")

  

输出结果

6、shutil.copy2(src, dst)

拷贝文件和状态信息

  
  import shutil
  shutil.copy2("old_test.txt","new.txt")

  

输出结果

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

shutil.copytree

递归的去拷贝文件夹,要对写入的目录有写权限

例子

  
  shutil.copytree(‘folder1‘, ‘folder2‘, ignore=shutil.ignore_patterns(‘__init__.py‘, ‘tmp*‘))
  #shutil.ignore_patterns(*patterns) #ignore代表排除

  

输出结果

8、shutil.rmtree(path[, ignore_errors[, onerror]])

递归的去删除文件

  
  shutil.rmtree(‘folder1‘)

  

9、shutil.move(src, dst)

递归的去移动文件,它类似mv命令,其实就是重命名。dst可以是文件名也可以是目录,目标文件存在则覆盖。

  
  shutil.move(‘folder1‘, ‘folder3‘)

  

例子

  
  import shutil
  shutil.move("a","temp")

  

输出结果

10、shutil.make_archive(base_name, format,...)

创建压缩包并返回文件路径,例如:zip、tar

创建压缩包并返回文件路径,例如:zip、tar

  • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
  • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
  • root_dir: 要压缩的文件夹路径(默认当前目录),将哪个目录或者文件打包(也就是源文件)
  • owner: 用户,默认当前用户
  • group: 组,默认当前组
  • logger: 用于记录日志,通常是logging.Logger对象

例子

  import shutil
  shutil.make_archive("test_package_bak","zip","test_package")
  #对文件夹下的test_package文件夹进行打包

  

输出结果

11、shutil.unpack_archive()

解压,可指定解压目录,否则默认解压到当前工作目录



shutil.unpack_archive(filename=hh, extract_dir=local_dir)

  

例子

  import shutil
  shutil.unpack_archive("test_package_bak.zip",extract_dir=r"D:\t1")

  

输出结果

二、zipfile模块压缩&解压缩

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

简单压缩例子

zipfile.ZipFile(fileName[, mode[, compression[, allowZip64]]])

  

参数说明

  • fileName:压缩后的文件名,
  • mode和一般的文件操作一样,‘r‘表示打开一个存在的只读ZIP文件;‘w‘表示清空并打开一个只写的ZIP文件,或创建一个只写的ZIP文件;‘a‘表示打开一个ZIP文件,并添加内容。
  • compression表示压缩格式,可选的压缩格式只有2个:ZIP_STORE;ZIP_DEFLATED。ZIP_STORE是默认的,表示不压缩;ZIP_DEFLATED表示压缩(即有压缩率)
  • allowZip64为True时,表示支持64位的压缩,一般而言,在所压缩的文件大于2G时,会用到这个选项;默认情况下,该值为False,因为Unix系统不支持。
f.write(f(filename[,arcname[,compression_type]])

  

将文件写入zip文件中,即将文件压缩

将zip外的文件filename写入到名为arcname的子文件中(当然arcname也是带有相对zip包的路径的),compression_type指定了压缩格式,也是ZIP_STORED或ZIP_DEFLATED。f的打开方式一定要是w或者a才能顺利写入文件。

压缩例子

  import zipfile
  ?
  f = zipfile.ZipFile("test.zip",mode="w",compression=zipfile.ZIP_DEFLATED)
  f.write("old_test.txt")   #也可以写文件完整路径名
  f.write("test.py")
  f.close()
  print(f.namelist())  #查看压缩包文件列表,f是ZipFile实例化出来的对象,这里调用namelist()方法

  

输出结果

  
  [‘old_test.txt‘, ‘test.py‘]

  

有两个方法比较类似,注意区分。

  • f.write指的是将已经存在的文件复制到压缩包,包括路径中的所有文件夹河其下的文件。
  • f.writestr是直接在压缩包里新建文件夹和文件,data参数是往该文件中写入的内容。

解压例子

f.extract(member[,path[,pwd]])从zip中提取一个文件,将它放到指定的path下,pwd是密码,用于被加密的zip文件,member是要提取的文件名

f.extractall(path[,pwd])  将所有文件按照namelist中显示得那样的目录结构从当前zip中提取出来并放到path下。

path解压缩目录 ,password当zip文件有密码时需要该选项

例子

  import zipfile
  f = zipfile.ZipFile("test_package.zip",mode="r") #注意此时解压不要用"w"格式,用"w"格式将清空压缩包文件
  f.extractall(path=r"d:\testaaa")  #将压缩包解压到d:\testaaa下
  f.extract("old_test.txt")  #提取压缩包中的一个文件到当前目录
  f.close()

  

输出结果

高级应用

zipfile.is_zipfile(filename) 判断一个文件是不是压缩文件

ZipFile.namelist() 返回文件列表

例子

  import zipfile
  f = zipfile.ZipFile("test_package.zip",mode="r") #注意此时解压不要用"w"格式,用"w"格式将清空压缩包文件
  print(f.namelist())
  print(zipfile.is_zipfile("test_package.zip"))

  

  ?

注意此时解压不要用"w"格式,用"w"格式将清空压缩包文件

输出结果

  [‘encode_decode问题.py‘, ‘new_test.txt‘, ‘old_test.txt‘, ‘test.py‘, ‘test.xml‘, ‘test1.py‘, ‘test2.py‘, ‘test3.py‘, ‘test6.py‘, ‘testxml.xml‘, ‘客户端1.py‘, ‘服务端.py‘]
  True
  ?

  

三、configparser模块

configparse模块用于生成和修改,解析(读取分析,获得数据)常见配置文档,多数此类配置文件名格式为XXX.ini,例如mysql的配置文件。

当前模块的名称在 python 3.x 版本中变更为 configparser。(python2首字母大写)

配置文件示例说明

  ##### ini 文件示例 ########

  [section1]
  name = nicholas
  age = 18

  [section2]
  name:python
  age = 19

  #### 文件格式说明 #########
  [XXX]  代表节点
  XX = XX 或者 XX : XX 代表参数
  #支持的两种分隔符“=”, “:”

  

例子

配置文件内容

文件名"test.ini"

文件内容

  [DEFAULT]
  default_mykey=myvalue
  ?
  [Section_a]
  Keya1=valuea1
  Keya2=valuea2
  Keya3=valuea3
  ?
  [Section_b]
  keyb1=valueb1
  keyb2=valueb2
  keyb3=valueb3
  ?
  [Db]
  db_host=127.0.0.1
  db_port=5432
  db_user=admin
  db_pass=Letmein
  db_name=test
  db_url = jdbc:postgresql://%(db_host)s:%(db_port)s/%(db_name)s

  

python文件操作

  
  import configparser
  ?
  con = configparser.ConfigParser()  #实例化创建一个对象
  con.read("test.ini")  #调用对象的read方法读取配置文件
  ?
  print(con.sections())  #获取所有节点名称,默认不显示DEFAULT
  # 输出结果  [‘Section_a‘, ‘Section_b‘, ‘Db‘]
  ?
  print(con.options(‘Section_a‘))  #获取指定节点的所有key
  # 输出结果 [‘keya1‘, ‘keya2‘, ‘keya3‘, ‘default_mykey‘]
  # 注意在处理键值对数据时,会将键名 全部转化为小写,同时自动加上默认的节点键值
  ?
  print(con.items(‘Section_a‘)) #获取指定节点的键值对
  #输出结果 [(‘default_mykey‘, ‘myvalue‘), (‘keya1‘, ‘valuea1‘), (‘keya2‘, ‘valuea2‘), (‘keya3‘, ‘valuea3‘)]
  # 这里输出结果也是自动加上默认的键值对
  ?
  print(con.get(‘Section_a‘,"keya1"))  #获取指定节点的指定key的value
  # 输出结果  valuea1
  ?
  print(con.getint("Db","db_port"))  #获取节点section1的age属性,属性需要是int型,否则ValueError
  # 输出结果 5432
  ?
  print(con.has_section("section"))  #检查指定节点是否存在,返回True或False
  # 输出结果 False
  ?
  print(con.has_option("Section_a","keya1"))  #检查指定节点中是否存在某个key,返回True或False
  # 输出结果 True
  ?
  ?
  # 循环查找节点中的key
  for i in con["Section_a"]:
      print(i)
  ?
  # 通过字典的形式取值
  data = con["Section_a"]["keya1"]
  print(data)
  # 输出结果 valuea1
  ?
  # 判断节点在不在对象里
  print("Section_a" in con)
  # 输出结果 True

  

其它增删改查语法

  import configparser
  ?
  con = configparser.ConfigParser()  #实例化创建一个对象
  con.read("test.ini")  #调用对象的read方法读取配置文件
  ?
  con.add_section("new_section") #添加一个节点,节点名为new_section, 此时添加的节点尚未写入文件,
                                 # 需要write方法写入文件
  ?
  con.remove_section("Section_b")  #删除一个节点,节点名为Section_b, 删掉了内存中的节点,
                                   # 但文件中的还没删除,需要write方法删除,也有remove_option

  ?
  con.set("Section_a", "k1", "v1") # 在已存在的节点中添加一个键值对k1 = v1 ,
                                   # 如果该节点不存在则报错,如果key已经存在,则修改value,这里也需要
                                   #有 write方法对文件进行操作
  ?
  con.write(open("test.ini", "w"))  #将修改写入文件

  

输出结果

补充remove_option(section, option)

从指定的节点中删除指定的选项。如果该部分不存在,请提出NoSectionError。如果存在的选项被删除,返回True;否则返回False。

原文地址:https://www.cnblogs.com/Nicholas0707/p/9102651.html

时间: 2024-10-03 13:46:51

Python之路(第十八篇)shutil 模块、zipfile模块、configparser模块的相关文章

Python之路【第八篇】:堡垒机实例以及数据库操作

Python之路[第八篇]:堡垒机实例以及数据库操作 堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + import paramiko transport = paramiko.Transport(('hostname', 22)) transport.connect(username='wupeiqi', password='123') ssh

Python开发【第十八篇】:MySQL(二)

Python开发[第十八篇]:MySQL(二) 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( SELECT nid, NAME FROM tb1 WHERE nid > 2 ) AS A WHERE A. NAME > 'alex'; 临时表搜索 1.创建视图 --格式:CREATE VIEW 视图名称 AS SQL语句 CREATE VIEW v

Python之路(十八):进程,线程,协程

python基础之进程.线程.协程 引子 进程 线程(优先阅读) 协程 进程 概念:就是一个程序在一个数据集上的一次动态执行过程(本质上来讲,就是运行中的程序(代指运行过程),程序不运行就不是进程)    抽象概念 组成:  1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成  2.数据集:数据集则是程序在执行过程中所需要使用的资源  3.进程控制块:进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志. 阐释:进程

Python之路【第二十八篇】:django视图层、模块层

1.视图函数 文件在view_demo 一个视图函数简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以.无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你的Python目录下面.除此之外没有更多的要求了——可以说“没有什么神奇的地方”.为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中. 视图

Python之路【第八篇】:Python基础(24)——面向对象进阶

参考连接: Python 面向对象(初级篇) http://www.cnblogs.com/wupeiqi/p/4493506.html python 面向对象(进阶篇) http://www.cnblogs.com/wupeiqi/p/4493506.html python 面向对象及相关 http://www.cnblogs.com/wupeiqi/articles/5017742.html 面向对象进阶: 类成员之字段.方法.属性: 类成员修饰符: 类成员之特殊成员 1.类方法 普通的方法

Python之路【第八篇】python实现线程池

线程池概念 什么是线程池?诸如web服务器.数据库服务器.文件服务器和邮件服务器等许多服务器应用都面向处理来自某些远程来源的大量短小的任务.构建服务器应用程序的一个过于简单的模型是:每当一个请求到达就创建一个新的服务对象,然后在新的服务对象中为请求服务.但当有大量请求并发访问时,服务器不断的创建和销毁对象的开销很大.所以提高服务器效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁,这样就引入了“池”的概念,“池”的概念使得人们可以定制一定量的资源,然后对这些资源

Python之路(第十四篇)os模块

一.os模块 1.os.getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹) import os print(os.getcwd()) 2.os.chdir(path) 改变当前工作目录,os.chdir()参数为路径 import os print(os.getcwd()) print(os.chdir(r"d:\python\exercise\test_package\a")) print(os.getcwd()) 输出结果 D:\06python\exe

Python之路(第二十六篇) 面向对象进阶:内置方法

一.__getattribute__ object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__getattr__()不会被调用(除非显示调用或引发AttributeError异常) class Foo: ? def __init__(self,x): self.x = x ? def __getattr__(self, item): print("执行__getattr__") ?

Python之路【第八篇】:堡垒机实例以及数据库操作(paramiko)

堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.con