python学习-shutil,configparser模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习-shutil,configparser模块相关的知识,希望对你有一定的参考价值。

shutil模块

shutil模块提供了大量的文件的高级操作。特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作。对单个文件的操作也可参见os模块。

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

shutil.copyfileobj(fsrc, fdst[, length]):复制文件内容(不包含元数据)从类文件对象src到类文件对dst。可选参数length指定缓冲区的大小,负数表示一次性读入。默认会把数据切分成小块拷贝,以免占用太多内存。注意:拷贝是从fsrc的当前文件开始

def copyfileobj(fsrc, fdst, length=16*1024):
    """copy data from file-like object fsrc to file-like object fdst"""
    while 1:
        buf = fsrc.read(length)
        if not buf:
            break
        fdst.write(buf)

shutil.copyfile(src, dst)

copyfile()调用了底函数层copyfileobj()。复制文件内容(不包含元数据)从src到dst。 DST必须是完整的目标文件名;拷贝目录参见shutil.copy()。如果src和dst是同一文件,就会引发错误shutil.Error。dst必须是可写的,否则将引发异常IOError。如果dst已经存在,它会被替换。特殊文件,例如字符或块设备和管道不能使用此功能,因为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.copytree(src, dst, symlinks=False, ignore=None)

递归的去拷贝文件

shutil.copytree(‘D:\\\\test‘,‘1234‘,ignore=shutil.ignore_patterns(‘*.docx‘))
#递归拷贝D盘test目录下的所有目录和文件,以.docx结尾的文件不拷贝。

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

递归的去删除文件

shutil.rmtree(‘D:\\\\test‘,ignore_errors=‘OSError‘)#删除D盘test下的所有目录及文件

shutil.move(src, dst)

递归的去移动文件

 

 copyfile( src, dst)  从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉
 copymode( src, dst)  只是会复制其权限其他的东西是不会被复制的
 copystat( src, dst)  复制权限、最后访问时间、最后修改时间
 copy( src, dst)     复制一个文件到一个文件或一个目录
 copy2( src, dst)   在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
 copy2( src, dst)   如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作
 copytree(olddir,newdir,True/Flase)  把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接

 

 

 

 

 

 

 

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

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

格式:shutil.make_archive(base_name, format[, root_dir[, base_dir, verbose, dry_run, owner, group, logger])

  • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
  • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
  • root_dir: 要压缩的文件夹路径(默认当前目录)
  • owner: 用户,默认当前用户
  • group: 组,默认当前组
  • logger: 用于记录日志,通常是logging.Logger对象
ret = shutil.make_archive("backup","tar",root_dir="/home/www/") #将/home/www目录下的文件进行备份,生成backup.tar的文件,其中tar为压缩包的后缀,www为压缩包文件名

解压

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

技术分享
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()
z.close()

zipfile 压缩解压
View Code
技术分享
import tarfile

# 压缩
tar = tarfile.open(your.tar,w)
tar.add(/Users/wupeiqi/PycharmProjects/bbs2.zip, arcname=bbs2.zip)
tar.add(/Users/wupeiqi/PycharmProjects/cmdb.zip, arcname=cmdb.zip)
tar.close()

# 解压
tar = tarfile.open(your.tar,r)
tar.extractall()  # 可设置解压地址
tar.close()

tarfile 压缩解压
View Code

 

部分内容参考:http://www.cnblogs.com/xiaowuyi/archive/2012/03/08/2385808.html

         http://www.cnblogs.com/saneri/p/5033821.html

configparser模块

在2.X版本中是ConfigParser

来看一个好多软件的常见文档格式如下

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
 
[bitbucket.org]
User = hg
 
[topsecret.server.com]
Port = 50022
ForwardX11 = no

如果想用python生成一个这样的文档怎么做呢?

import configparser

config = configparser.ConfigParser()
config["DEFAULT"] = {ServerAliveInterval: 45,
                      Compression: yes,
                     CompressionLevel: 9}
config[DEFAULT][ForwardX11] = yes
config[bitbucket.org] = {}
config[bitbucket.org][User] = hg
config[topsecret.server.com] = {}
topsecret = config[topsecret.server.com]
topsecret[Host Port] = 50022
topsecret[ForwardX11] = no
with open(example.ini, w) as configfile:
   config.write(configfile)

会在当前路径生成一个文件:examp.ini,其内容为:

[DEFAULT]
serveraliveinterval = 45
compressionlevel = 9
compression = yes
forwardx11 = yes

[bitbucket.org]
user = hg

[topsecret.server.com]
host port = 50022
forwardx11 = no

 读出配置文件(注意理解default部分里面的内容如果没有被替换掉就是默认的值)

>>> import configparser
>>> config = configparser.ConfigParser()
>>> config.sections()
[]
>>> config.read(example.ini)
[example.ini]
>>> config.sections()
[bitbucket.org, topsecret.server.com]
>>> bitbucker.org in config
False
>>> bitbucket.org in config
True
>>> config[bitbucket.org][User]
hg
>>> topsecret = config[topsecret.server.com]
>>> topsecret[ForwardX11]
no
>>> for key in config[bitbucket.org]: print(key)

user
serveraliveinterval
compressionlevel
compression
forwardx11
>>> config[bitbucket.org][ForwardX11]
yes

 >>> config[‘topsecret.server.com‘][‘ForwardX11‘]
  ‘no‘

 

 1 import configparser
 2 """read"""
 3 config = configparser.ConfigParser()
 4 config.read(example.ini)
 5 sec = config.sections()
 6 print(sec)
 7 print("---"*20)
 8 options = config.options(bitbucket.org)
 9 print(options)
10 print("---"*20)
11 items = config.items(bitbucket.org)
12 print(items)
13 print("---"*10)
14 val1 = config.get(bitbucket.org,User)    #获取bitbuchket.org部分中的User的值
15 print(val1)
16 print("---"*10)
17 val2 = config.getint(bitbucket.org,compressionlevel)
18 print(val2)
19 
20 输出:
21 [bitbucket.org, topsecret.server.com]
22 ------------------------------------------------------------
23 [user, serveraliveinterval, compressionlevel, compression, forwardx11]
24 ------------------------------------------------------------
25 [(serveraliveinterval, 45), (compressionlevel, 9), (compression, yes), (forwardx11, yes), (user, hg)]
26 ------------------------------
27 hg
28 ------------------------------
29 9

configparser增删改查语法

########## 删除 topsecret.server.com此部分的内容 ##########
config = configparser.ConfigParser()
config.read(example.ini)
sec = config.remove_section(topsecret.server.com)
config.write(open(example.ini, "w"))
##################添加topsecret.server.com#################
sec = config.has_section(topsecret.server.com)    #检查是否存在topsecret.server.com
print(sec)
sec = config.add_section(topsecret.server.com)       #添加
config.write(open(example.ini, "w"))

#################变更###############
config.set(topsecret.server.com,key1,11111)   #更改或添加
config.set(topsecret.server.com,key2,22222)
config.write(open(example.ini, "w"))

config.remove_option(topsecret.server.com,key1)     #删除
config.write(open(example.ini, "w"))

输出:
False

 

 exampl.ini文件最后变为:

[DEFAULT]
serveraliveinterval = 45
compressionlevel = 9
compression = yes
forwardx11 = yes

[bitbucket.org]
user = hg

[topsecret.server.com]
key2 = 22222

 



以上是关于python学习-shutil,configparser模块的主要内容,如果未能解决你的问题,请参考以下文章

Python学习笔记——基础篇第六周——shutil模块

python基础-shutil模块

python基础-shutil模块

python学习shutil模块的文件压缩和解压用法

Python学习week7-OS模块与shutil模块

Python之shutil模块