• Python 模块续和面向对象的介绍(六)


    一、基本模块

    shutil

    文件、目录、压缩包的处理模块

    shutil.copyfile(src, dst)
    拷贝文件
    
    >>> shutil.copyfile('a.log','b.log')
    ‘b.log'
    -rw-r--r--  1 jack  wheel  4  2 25 15:59 a.log
    -rw-r--r--  1 jack  wheel  4  2 25 16:03 b.log
    shutil.copymode(src, dst)
    仅拷贝权限。内容、组、用户均不变
    
    >>> shutil.copymode('a.log','b.log’)
    jackdeMacBook-Pro:python jack$ ll
    
    total 16
    
    -rw-r--r--  1 jack  wheel  4  2 25 15:59 a.log
    
    -rwxr-xr-x  1 jack  wheel  4  2 25 16:03 b.log*
    
    jackdeMacBook-Pro:python jack$ ll
    
    total 16
    
    -rw-r--r--  1 jack  wheel  4  2 25 15:59 a.log
    
    -rw-r--r--  1 jack  wheel  4  2 25 16:03 b.log
    shutil.copystat(src, dst)
    拷贝状态的信息,包括:mode bits, atime, mtime, flags
    
    >>> shutil.copystat('a.log','b.log')
    jackdeMacBook-Pro:python jack$ stat a.log
    16777220 6143218 -rw-r--r-- 1 jack wheel 0 4 "Feb 25 16:03:07 2016" "Feb 25 15:59:52 2016" "Feb 25 15:59:52 2016" "Feb 25 15:59:52 2016" 4096 8 0 a.log
    jackdeMacBook-Pro:python jack$ stat b.log
    16777220 6143570 -rw-r--r-- 1 jack wheel 0 4 "Feb 25 16:03:07 2016" "Feb 25 16:03:07 2016" "Feb 25 16:06:11 2016" "Feb 25 16:03:07 2016" 4096 8 0 b.log
    jackdeMacBook-Pro:python jack$ stat b.log
    16777220 6143570 -rw-r--r-- 1 jack wheel 0 4 "Feb 25 16:03:07 2016" "Feb 25 15:59:52 2016" "Feb 25 16:07:28 2016" "Feb 25 15:59:52 2016" 4096 8 0 b.log
    shutil.copy(src, dst)
    拷贝文件和权限
    
    >>> shutil.copy('a.log','b.log')
    ‘b.log'
    jackdeMacBook-Pro:python jack$ ll
    total 16
    -rw-r--r--  1 jack  wheel   4  2 25 15:59 a.log
    -rwxr-xr-x  1 jack  wheel  11  2 25 16:09 b.log*
    jackdeMacBook-Pro:python jack$ ll
    total 16
    -rw-r--r--  1 jack  wheel  4  2 25 15:59 a.log
    -rw-r--r--  1 jack  wheel  4  2 25 16:09 b.log
    shutil.copy2(src, dst)
    拷贝文件和状态信息
    
    >>> shutil.copy2('a.log','c.log’)
    ‘c.log'
    -rw-r--r--  1 jack  wheel  4  2 25 15:59 a.log
    -rw-r--r--  1 jack  wheel  4  2 25 16:09 b.log
    -rw-r--r--  1 jack  wheel  4  2 25 15:59 c.log
    jackdeMacBook-Pro:python jack$ stat a.log
    16777220 6143218 -rw-r--r-- 1 jack wheel 0 4 "Feb 25 16:11:26 2016" "Feb 25 15:59:52 2016" "Feb 25 15:59:52 2016" "Feb 25 15:59:52 2016" 4096 8 0 a.log
    jackdeMacBook-Pro:python jack$ stat c.log
    16777220 6144432 -rw-r--r-- 1 jack wheel 0 4 "Feb 25 16:11:26 2016" "Feb 25 15:59:52 2016" "Feb 25 16:11:26 2016" "Feb 25 15:59:52 2016" 4096 8 0 c.log
    shutil.copytree(src, dst, symlinks=False, ignore=None)
    递归的去拷贝文件
    >>> shutil.copytree('a','b')
    ‘b'
    jackdeMacBook-Pro:python jack$ tree
    └── a
        └── a.log
    
    jackdeMacBook-Pro:python jack$ tree
    ├── a
    │   └── a.log
    └── b
        └── a.log
    shutil.rmtree(path[, ignore_errors[, onerror]])
    递归的去删除文件
    
    >>> shutil.rmtree('b’)
    drwxr-xr-x  3 jack  wheel  102  2 25 16:13 a/
    shutil.move(src, dst)
    递归的去移动文件
    
    >>> shutil.move('a','c’)
    ‘c'
    drwxr-xr-x  3 jack  wheel  102  2 25 16:13 c/
    import shutil
    
    #指定压缩后的文件名/压缩方法/源路径
    ret = shutil.make_archive('test','zip',root_dir='/Users/jack/Documents/git/github/Demo/days06/test')
    #指定压缩后的目标路径和文件名/压缩方法/源路径
    ret = shutil.make_archive('/Users/jack/Documents/git/github/Demo/days06/ss','zip',root_dir='/Users/jack/Documents/git/github/Demo/days06/test')
    
    #区别   压缩后放置当前程序目录
    
    #解压
    import zipfile
    z = zipfile.ZipFile('test.zip','r')
    z.extractall()
    z.close()


    xml处理模块

    import xml.etree.ElementTree as et
    
    tree = et.parse('t1.xml')
    root = tree.getroot()
    #print(root.tag)
    
    #遍历整个文档
    '''
    for child in root:
        print(child.tag,child.attrib)
        for i in child:
            print(i.tag,i.text)
    '''
    #遍历rank节点
    '''
    for node in root.iter('rank'):
        print(node.tag,node.text)
    '''
    
    '''
    #修改节点
    for node in root.iter('rank'):
        print(node.tag,node.text)
        new_rank = int(node.text) + 10
        node.text = str(new_rank)
        node.set('update','sss')
    tree.write('t2.xml')
    '''
    #删除节点
    '''
    for country in root.findall('country'):
        rank = int(country.find('rank').text)
        if rank > 60 :
            root.remove(country)
    tree.write('t3.xml')
    '''
    '''
    import configparser
    config = configparser.ConfigParser()
    config['DEFAULT'] = {
        'ServerAliveInterval':'45',
        'Compression':'yes',
        'ComressionLevel':'9'
    }
    config['bitbucket.org'] = {}
    config['bitbucket.org']['User'] = 'hg'
    config['topSecret.server.com'] = {}
    topSecret = config['topSecret.server.com']
    topSecret['Host Port'] = '3306'
    topSecret['ForwardX11'] = 'no'
    config['DEFAULT']['ForwardXll'] = 'yes'
    with open('ss1.cfg','w') as configfile:
        config.write(configfile)

    configparser 

    用于对特定的配置进行操作

    >>> import configparser
    >>> config = configparser.ConfigParser()
    >>> config.sections()
    []
    >>> config.read('ss1.cfg')
    ['ss1.cfg']
    >>> config.sections()
    ['bitbucket.org', 'topSecret.server.com']
    >>> 'bitbucket.org' in config
    True
    >>> 'bitbucket.orgs' in config
    False
    >>> config['bitbucket.org']['User']
    'hg'
    >>> config['DEFAULT']['Compression']
    'yes'
    >>> topsecret = config['topSecret.server.com']
    >>> topsecret['host port']
    '3306'
    
    >>> for key in config['bitbucket.org']:print(key)
    ...
    user
    compression
    serveraliveinterval
    comressionlevel
    forwardxll
    >>> config['bitbucket.org']['forwardxll']
    'yes'
    
    hashlib
    import hashlib
    
    h = hashlib.md5()
    h.update(b'haha')
    h.update(b'enenen')
    
    msg = h.digest()
    msg1 = h.hexdigest()
    print(msg)
    >>> print(msg)
    b'b\xfc\xb2\xd9\x07\x83\x81\x18I\x1a\x0c\xaf\xa6\xdb\xbf\xd7'
    >>> print(msg1)
    62fcb2d907838118491a0cafa6dbbfd7

    subprocess

    >>> import subprocess as sub
    >>> sub.run('df')
    Filesystem    512-blocks      Used Available Capacity  iused    ifree %iused  Mounted on
    /dev/disk1     234586112 138600696  95473416    60% 17389085 11934177   59%   /
    devfs                371       371         0   100%      642        0  100%   /dev
    map -hosts             0         0         0   100%        0        0  100%   /net
    map auto_home          0         0         0   100%        0        0  100%   /home
    /dev/disk2s1   253425664  37116928 216308736    15%   144988   844956   15%   /Volumes/Backup
    CompletedProcess(args='df', returncode=0)
    >>>sub.run(['df -h'],shell=True)
    Filesystem      Size   Used  Avail Capacity  iused    ifree %iused  Mounted on
    /dev/disk1     112Gi   66Gi   46Gi    60% 17389072 11934190   59%   /
    devfs          186Ki  186Ki    0Bi   100%      642        0  100%   /dev
    map -hosts       0Bi    0Bi    0Bi   100%        0        0  100%   /net
    map auto_home    0Bi    0Bi    0Bi   100%        0        0  100%   /home
    /dev/disk2s1   121Gi   18Gi  103Gi    15%   144988   844956   15%   /Volumes/Backup
    CompletedProcess(args=['df -h'], returncode=0)
    >>> sub.run(['df -h'],shell=True,stdout=subprocess.PIPE)
    CompletedProcess(args=['df -h'], returncode=0, stdout=b'Filesystem      Size   Used  Avail Capacity  iused    ifree %iused  Mounted on\n/dev/disk1     112Gi   66Gi   46Gi    60% 17389258 11934004   59%   /\ndevfs          186Ki  186Ki    0Bi   100%      642        0  100%   /dev\nmap -hosts       0Bi    0Bi    0Bi   100%        0        0  100%   /net\nmap auto_home    0Bi    0Bi    0Bi   100%        0        0  100%   /home\n/dev/disk2s1   121Gi   18Gi  103Gi    15%   144988   844956   15%   /Volumes/Backup\n')

    logging 

       用于便捷记录日志且线程安全的模块

      日志可以分为 debug(), info(), warning(), error() and critical() 5个级别

    import logging
    
    logging.debug('this is a debug messages!')
    logging.info('this is a info messages!')
    logging.warning('this is a warning messages!')
    logging.critical('this is  a critical messages!!!')
    
    logging.basicConfig(format='%(asctime)s %(message)s',datefmt='%Y-%m-%d %H:%M',filename='access.log',level=logging.INFO)
    logging.debug('This messages should go to the access.log!')
    logging.info('This is info!')
    logging.warning('This is warning')
    
    logger = logging.getLogger('Test')
    logger.setLevel(logging.DEBUG)
    
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    
    fh = logging.FileHandler('access.log')
    fh.setLevel(logging.WARNING)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    ch.setFormatter(formatter)
    fh.setFormatter(formatter)
    
    logger.addHandler(ch)
    logger.addHandler(fh)
    
    logger.debug('debug')
    logger.info('info..')
    logger.warn('warn!')
    logger.error('error!!')
    logger.critical('critical!!!')

    二、初识面向对象

    什么是类?
    动物、人、山等都是类。
    什么是对象?
    对象即类的实体,小明就是对象。
    什么是方法?
    定义一个类的功能,小明会吃饭就是方法。
    什么是继承?
    继承父类,小明也有黑色的头发.
    什么是封装?
    小明不能像袋鼠一样蹦。
    什么是多态性?
    拍一巴掌,可能是很大的力气,也可能是很温柔的。
    什么是抽象性?
    简化复杂的现实的问题途径,可以给任何问题找到恰当的类的定义,比如空气。

        类就是一个模板,模板里包括很多函数,函数可以实现很多功能。对象就是根据模板创建的实例,通过实例化对象可以执行类里面的函数。


    如何定义一个类?
    类是对现实世界中一些事物的封装,可以用下面的方式来定义:
    class Role(object):
        block

        在block里面就可以定义属性和方法。定义完类后,就产生一个类对象。类对象支持引用和实例化。引用是通过类对象去调用类中的属性或者方法。而实例化是产生出一个类对象的实例,称作实力对象。
        由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就把life_value等属性绑上去:

    class Role(object):
        def __init__(self,name,armor,weapon,life_value=100,money=0):
            self.name = name
            self.armor = armor
            self.weapon = weapon
            self.life_value = life_value
            self.money = money



        和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数。

    class Role(object):
        def __init__(self,name,armor,weapon,life_value=100,money=0):
            self.name = name
            self.armor = armor
            self.weapon = weapon
            self.life_value = life_value
            self.money = money
        def damage(self):
        pass
  • 相关阅读:
    mysql 权限问题
    触发器作用
    带有循环功能的存储过程
    带有条件判断的存储过程
    数据存储 三大范式-----------待续
    存储过程自 带条件判断的存储过程
    线程异步更新UI
    TextBox只能输入数字
    C#中无边框窗体移动或拖控件移动窗体
    classloader原理
  • 原文地址:https://www.cnblogs.com/xiajie/p/5217769.html
Copyright © 2020-2023  润新知