zoukankan      html  css  js  c++  java
  • 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 命令模式和交互模式
    Python自带IDE设置字体
    Python2.7和3.7区别
    Kubernetes1.91(K8s)安装部署过程(八)-- kubernetes-dashboard安装
    Kubernetes1.91(K8s)安装部署过程(七)--coredns安装
    nginx 设置自签名证书以及设置网址http强制转https访问
    Kubernetes1.91(K8s)安装部署过程(六)--node节点部署
    VMware安装VMware tool是 遇到The path "" is not a valid path to the 3.10.0-693.el7.x86_64 kernel headers.
    第三方git pull免密码更新
    Kubernetes1.91(K8s)安装部署过程(五)--安装flannel网络插件
  • 原文地址:https://www.cnblogs.com/cq90/p/6953060.html
Copyright © 2011-2022 走看看