python学习笔记14

python学习笔记14

shutil模块

python中文件相关操作

import shutil

# 拷贝文件
shutil.copy2('原文件','现文件')

#拷贝目录
shutil.copytree('原目录','新目录')
shutil.copytree('原目录','新目录',ignore=shutil.ignore_patterns("*.pyc"))
# ignore后加需要忽略的文件

# 删除目录(慎用,不可恢复)
shutil.rmtree("要删除的文件路径",ignore_errors=True)

# 移动文件/目录
shutil.move("原路径","新路径",copy_function=shutil.copy2)

# 获取磁盘使用空间
total,used,free = shutil.disk_usage("c:\\")
print(f"当前磁盘共{total/1073741824}GB,已使用{used/1073741824}GB,剩余{free/1073741824}GB")

# 压缩文件
shutil.make_archive('压缩文件夹名字','zip','待压缩文件路径')

# 解压文件
shutil.unpack_archive('zip压缩文件路径.zip','解压到的文件夹路径')
logging模块

为什么要写log:

  1. log可以排错
  2. log可以用来做数据分析、对操作进行审计

在logging模块中,输出内容是有等级的(默认处理warning级别以上的信息):

  1. logging.debug('debug message') 调试信息

  2. logging.info('info message') 内容信息

  3. logging.warning('warning message') 警告信息

  4. logging.error('error message') 错误信息

  5. logging.critical('critical message') 批判信息

面向对象

复杂的,拥有开放式结局的程序比较适合使用面向对象开发。

在python中,有一类专门的面向对象语言:类

# 定义一个类
class Person:
    # 在定义类的属性的时候必须使用__init__方法
    def __init__(self,name,sex,age):
        self.name = name
        self.sex = sex
        self.age = age
# 可以如下调用类创建一个类的实例
Lieve = Person('Lieve','male','22')
# 可以看到Lieve是一个Person类实例
print(Lieve) # <__main__.Person object at 0x000001A8AF8A83C8>
# 可以通过__dict__方法查看属性
print(Lieve.__dict__) # {'name': 'Lieve', 'sex': 'male', 'age': '22'}
# 也可以通过以下方法查看实例的具体属性
print(Lieve.name) # Lieve
print(Lieve.sex) # male
print(Lieve.age) # 22
# 属性的修改
Lieve.age = 23
print(Lieve.age) # 23
# 属性的增加
Lieve.hobby = 'game'
print(Lieve.hobby) # game
# 属性的删除
del Lieve.hobby
print(Lieve.__dict__) # {'name': 'Lieve', 'sex': 'male', 'age': 23}

实例化过程:

  1. 使用类名()后先开辟一块空间
  2. 调用__init__把空间的内存地址作为self参数传递到函数内部
  3. 所有对象需要使用的属性都要和self关联起来
  4. 执行完init中的逻辑后,self变量会自动地返回到调用的地方(实例化的地方)

在类中定义方法和调用方法

# 在类中定义方法和调用方法
class Person:
    # 在定义类的属性的时候必须使用__init__方法
    def __init__(self,name,sex,age):
        self.name = name
        self.sex = sex
        self.age = age
    # 定义一个方法
    def play(self):# 方法中必须传入一个参数self
        print(f'{self.name} is playing game')
# 创建一个类的实例      
Lieve = Person('Lieve','male','22')
# 调用类的方法
Lieve.play() # Lieve is playing game
# 创建一个矩形类,属性为长宽,有计算面积和周长的方法
class Rectangle:
    def __init__(self,height,width):
        self.height = height
        self.width = width
    
    def perimeter(self):
        return (self.height+self.width)*2
    
    def area(self):
        return self.height*self.width
rec = Rectangle(5,4)
print(rec.__dict__) # {'height': 5, 'width': 4}
print(rec.perimeter()) # 18
print(rec.area()) # 20

面向对象的命名空间

# 类的成员和命名空间
class A:
    C = 1  # 静态变量/静态属性,存储在类命名空间内
    def __init__(self):  # 绑定方法,存储在类的命名空间中
        pass
    def func1(self):pass
    def func2(self):pass    
    def func3(self):pass    
    def func4(self):pass   
print(A.C) # 1

类中的变量是静态变量,实例化对象中的变量只属于对象本身,每个实例化对象都有术语自己的空间来储存对象的变量,当使用对象名去调用某一个属性的时候会优先在自己的空间中寻找,找不到再去所对应的类中寻找,找不到就报错。对于类来说,类中的变量所有的对象都是可以读取的,并且读取的是同一份变量。

# 实现一个类,可以自动统计实例了多少个对象
class Count_num:
    Count = 0
    def __init__(self):
        Count_num.Count += 1
        pass
# 创建两个实例化对象
a = Count_num() 
b = Count_num()
print(Count_num.Count) # 2
c = Count_num() 
print(Count_num.Count) # 3

组合

一个类的对象是另外一个类对象的属性,成为组合。

# 一个学生类,一个班级类
class Student:
    def __init__(self,name,age,clas):
        self.name = name
        self.age = age        
        self.clas = clas
class Clas:
    def __init__(self,name,num):
        self.name = name
        self.num = num

# 如果想查看同学们的班级名称:
# 可以这样创建实例化对象
A = Clas('高三A班',1)
B = Clas('高三B班',2)
# 利用对象作为属性
小明 = Student('小明',17,A)
小红 = Student('小红',18,B)
# 查看班级名称
print(小明.clas.name) # 高三A班
print(小红.clas.name) # 高三B班
posted @ 2020-03-31 19:38  卡奇欧  阅读(101)  评论(0)    收藏  举报