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 压缩解压
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 压缩解压
部分内容参考: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模块的主要内容,如果未能解决你的问题,请参考以下文章