重点注意:
翻车点:
当以二进制模式打开文件进行文件操作时.
read 函数最终读取文件内容为空时,返回的结果为 b’’
表示是一个二进制的空字符串
在 Python2.7版本中. ‘’ == b’’ 结果为True
在 Python3.6版本中. ‘’ == b’’ 结果为False
``
# 批量读取文件,改名之后去复制 # E:/PythonProject/MyProject/01/Day07 # 使用文件操作功能,需要先导入os模块 import os # 源文件夹,目标文件夹 def muilt_file_copy(src, dst): print(os.getcwd()) # 切换目录 os.chdir(src) # 从源当中去读取所有的文件信息 file_list = os.listdir(src) print(file_list) # 创建出一个新的目标文件夹 os.mkdir(dst) # 循环 读取文件次数,遍历每一个文件 for file in file_list: # 对文件改名,遍历的文件就是需要复制的源文件,改名后的文件就是要复制出来的文件 # 先对源文件名进行分割,保险起见,从右向左分割 s_file = file.rpartition(".") dst_file = dst + "/" + s_file[0] + "_bak" + s_file[1] + s_file[2] print(dst_file) # 分别以读写的方式打开源和目标文件 file_r = open(file, "rb") file_w = open(dst_file, "wb") # 读取内容,写入内容 while True: content = file_r.read(1024) # 因为打开文件时,使用的是二进制打开,所以在判断结束时,需要判断是否是一个二进制空字符串 if content == b"": print(f'{file} 复制成功!') file_r.close() file_w.close() break # 如果读取内容不是空,将读取内容写入到目标文件 file_w.write(content) else: print(f"一共复制了{len(file_list)}个文件") # 源文件夹 src = "C:/Users/LH/Desktop/v" # 目标文件夹 dst = "C:/Users/LH/Desktop/v_bak" muilt_file_copy(src, dst)
类: 是对现实事物的属性和行为的抽象
类不能具体的表示一个真实存在的事物.
对象: 是类的一种实例表示
是真实存在的,看得见摸得到的
类(Class) 由3个部分构成
类的名称:类名 类的属性:一组数据 类的方法:允许对进行操作的方法 (行为)
经典类:
class 类名:
属性
行为
新式类:
class 类名(object):
属性
行为
在 python3 以后,只有新式类
对象名 = 类名(参数列表…)
对象调用方法的格式:
对象名.方法名(参数列表)
注意:
方法中参数列表中的第一个参数self,不需要手动传递,这个参数是由解释器在执行程序时,自动传递的
默认会将当前调用方法的对象引用传递进去
问:如果通过同一个类,创建多次对象时,多次创建的对象是否是同一个?
答:否,创建的是多个类型相同,但地址不同的多个对象
在实例对象以后,为该对象添加一个属性
_init方法_
这个方法是一个魔法方法, 命名规则是前后各有两个下划线,
魔法方法是python当中,预设好的,具有特定功能的方法
一般这种方法,不需要手动调用,会自动调用执行
该方法会在创建对象的时候自动调用.
调用时,这个方法用来为对象进行初始化
_str_方法(重点掌握)
格式化对象
该方法返回一个字符串值
当使用 str() 做类型转换时,会自动调用 该方法
当一个自定义类,没有实现该方法时,默认打印格式是 <模块名.类名 object at 地址>
eg:<main.Cat object at 0x02176610>
name,age
{name:tom, age:1}
调用该方法的场景: 1. 通过 print() 函数打印时,会自动调用该方法 2. 通过 str() 函数对自定义的对象进行类型转换时,会自动调用该方法 __del__ 方法(了解) 该方法是用来在销毁对象时,回收释放资源使用的方法 该方法也是自动调用 当在使用 del 对象时,会调用方法
``
# 设计一些类,类在python中分为经典类和新式类 # 经典类1 class Hero(): # 定义一个方法 def skill(self): print("龟派气功波..") # 经典类2 class Person(): def eat(self, food): print("吃", food) def sleep(self): print("每天都睡觉") # 新式类 class Dog(object): def bark(self): print("旺旺") # 实例 对象 class Person(object): # 第一个方法 def eat(self, food): print("一个人在吃", food) # 第二个方法 def sleep(self, t): print("一个人睡了", t, "个小时") tom = Person() # 实例对象时,会在内存中分配一块内存空间,这个空间就是这个对象的位置 # 然后将这个地址引用返回对象名 print(tom) # 使用对象执行方法 tom.eat("米饭") # 可以实例多个对象 jack = Person() jack.sleep(7) # 为对象动态绑定属性 class Person(object): # 第一个方法 def eat(self, food): print(self.name, "在吃", food) tom = Person() tom.name = "Tom" # 动态为对象绑定属性时,给哪个对象绑定了属性,只能哪个对象有该属性,其他对象没有该属性的 # 如果在方法中引用改属性,那么这时没有改属性的对象调用这个方法会报错 tom.eat("海鲜") # _init_方法 # 该方法会在创建对象自动调用,并对该对象进行初始化操作 class Cat(object): # 实现魔法方法_init_,准备为对象初始化属性 def __init__(self, name, age): print("init Run....", self) # 绑定属性时,使用self.属性名=值 self.name = name self.age = age def show(self): print(self.name, self.age) tom = Cat("Tom", 1) # 使用属性 print(tom.name) print(tom.age) jack = Cat("Jack", 2) # 在调用方法时,方法的第一个参数self不用手动传参,解释器自动调用该方法的对象传递进去 tom.show() jack.show() # _str_()方法格式化对象 class Cat(object): def __init__(self, name, age, height): # 将三个属性绑定给对象 self.name = name self.age = age self.height = height # 想打印对象的格式,需要实现这个方法 def __str__(self): # print(f"名字:{self.name} 年龄:{self.age} 高度:{self.height}") # 该函数必须要有一个返回值,并且是字符串,哪怕是空串 # 如果需要将对象的信息按照一定的格式进行格式化,那么可以在这里进行格式修饰 # 修饰完后,可以将这个格式化字符串返回,让str()方法在执行时,得到该对象转换的字符串类型 s = self.name.ljust(10) + str(self.age).ljust(5) + self.height.ljust(5) return s tom = Cat("Tom", 1, "50cm") print(tom) # _del_方法 class Cat(object): def __del__(self): print("del run...") tom = Cat() print("over")