思维导图
0 复习函数
递归函数一般都是有参数.
num = 10
def func():
global
if num == 1:
return
num = num -1
func()
my_list = [20, 30]
print(my_list)
def func(a):
a += 20, # 列表, += , extend 即 a.extend(20,) # str list tuple dict
func(my_list)
print(my_list) # [20, 30, 20]
可迭代: 能使用 for 循环的就是可迭代的
1. 文件读操作
read()
# 1. 打开文件
f = open('a.txt', 'r', encoding='utf-8')
# 2. 读写文件 文件对象.read(n) n 一次读取多少字节的内容,默认不写,读取全部内容
buf = f.read(3)
print(buf) # 123
print('-'*30)
buf = f.read(3) #
print(buf)
# 3. 关闭文件
f.close()
按行读取
f = open('a.txt', 'r', encoding='utf-8')
# f.readline() # 一次读取一行的内容, 返回值是读取到的内容(str)
# buf = f.readline()
# f.readlines() # 按行读取,一次读取所有行,返回值是列表, 列表中的每一项是一个字符串,即一行的内容
buf = f.readlines()
print(buf)
buf = [i.strip() for i in buf]
print(buf)
f.close()
模拟读取大文件
read() 一次读取全部的内容
read() 读到文件末尾会返回空
f = open('a.txt', 'r', encoding='utf-8')
while True:
buf = f.readline()
if buf: # if len(buf) > 0 容器,可以直接作为判断条件,容器中有内容,为True,没有数据是False
print(buf, end='')
else:
# 文件读完了
break
f.close()
f = open('b.txt', 'r', encoding='utf-8')
while True:
buf = f.read(5) # f.read(4096)
if buf:
# print(buf, end='')
print(buf)
else:
break
f.close()
补充: 计算机中的大小
计算机只认识 0 和 1 ,
进制:
二进制, 只有 0 和 1 组成,逢二进一
十进制, 0 1 2 3 4 5 6 7 8 9 , 逢十进一
十六进制, 0 1 2 3 4 5 6 7 8 9 A B C D E F 逢十六进一
计算机最小的单位是 bit(位), 只有两个数据值 0 和 1
字节: 是计算机中基本的储存单位 byte
1 byte = 8 bit
1KB = 1024 byte
1MB = 1024 KB
1GB = 1024 MB
1TB = 1024 GB
...
100Mbits 200Mbits
12.5MB/s 25MB/s
文件打开模式
文本文件: txt, .py .md 能够使用记事本打开的文件
二进制文件: 具有特殊格式的文件, mp3 mp4 rmvb avi png jpg 等
文本文件可以使用 文本方式打开文件,也可以使用二进制的方式打开文件
二进制文件,只能使用二进制的方式打开文件
二进制打开方式如下: 不管读取,还是书写,都需要使用二进制的数据
rb wb ab
注意点: 不能指定 encoding 参数
访问模式 | 说明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
应用-文件备份
1. 用只读的方式,打开文件
2. 读取文件内容
3. 关闭文件
4. 只写的方式,打开新文件
5. 将 第 2 步读取的内容写入新文件
6. 关闭新文件
思考:
1. 如果文件比较大,循环读取文件
2. 复制备份的文件可能是 txt 文件,可能是 二进制文件, ---> 使用二进制方式打开文件
文件和文件夹的操作
# 对文件和目录的操作,需要导入 os 模块
import os
# 1. 文件重命名 os.rename(原文件路径名, 新文件路径名)
# os.rename('a.txt', 'aa.txt')
# 2. 删除文件 os.remove(文件的路径名)
# os.remove('aa.txt')
# 3. 创建目录 os.mkdir(目录路径名) make directory
# os.mkdir('test')
# os.mkdir('test/aa')
# 4. 删除空目录 os.rmdir(目录名) remove directory
# os.rmdir('test/aa')
# 5. 获取当前所在的目录 os.getcwd() get current working directory
buf = os.getcwd()
print(buf)
# 6. 修改当前的目录 os.chdir(目录名) change dir
os.chdir('test')
buf = os.getcwd()
print(buf)
# 7. 获取指定目录中的内容, os.listdir(目录), 默认不写参数,是获取当前目录中的内容
# 返回值是列表, 列表中的每一项是文件名
buf = os.listdir() # test
print(buf)
应用-批量修改文件名
import os
def create_files():
for i in range(10):
file_name = 'test/file_' + str(i) + '.txt'
print(file_name)
f = open(file_name, 'w')
f.close()
def create_files_1():
os.chdir('test')
for i in range(10, 20):
file_name = 'file_' + str(i) + '.txt'
print(file_name)
f = open(file_name, 'w')
f.close()
os.chdir('../') # ../ 上一级目录
def modify_filename():
os.chdir('test')
buf_list = os.listdir()
# print(buf_list)
for file in buf_list:
new_file = 'py43_' + file
os.rename(file, new_file)
os.chdir('../')
def modify_filename_1():
os.chdir('test')
buf_list = os.listdir()
# print(buf_list)
for file in buf_list:
num = len('py43_')
new_file = file[num:]
os.rename(file, new_file)
os.chdir('../')
# create_files()
# create_files_1()
# modify_filename()
modify_filename_1()
学生管理系统文件版
学生管理系统
{'name': 'isaac', 'age': 18, 'gender': m}
[{}, {}]
需要将所有的学生信息保存的到文件中.最简单的的方法,是将整个列表保存到文件中
'[{}, {}, {}]'
w
'[{}, {}, {}]' ---> [{}, {}, {}]
eval()
'[{}, {}, {}]' ---> eval('[{}, {}, {}]')
stu_list
面向对象
概念介绍[了解]
面向对象和面向过程,是两种编程思想. 编程思想是指对待同一个问题,解决问题的套路方式.
-
面向过程: 注重的过程,实现的细节.亲力亲为.
- 函数
-
面向对象: 关注的是结果, 偷懒.
- 封装, 继承 和多态(三大技术)
类和对象[理解]
类和对象,是面向对象中非常重要的两个概念
- 类
- 类是泛指的,指代多个, 是由对的抽象来的
- 在代码中, 是通过关键字
class
定义的
- 对象
- 对象是特指的,指代一个,是具体存在的
- 在代码中, 对象是由类创建的
类的组成
- 类名
- 属性: 特性, 变量
- 一个类的属性有很多,值关注需要使用的,没有用到的不用管
- 方法: 行为, 函数
类的抽象
- 名词提炼法
- 所见即所得
类的定义
随后的代码,使用狗类进行演示说明
类名: Dog(狗类)
属性:
姓名 name
年龄 age
....
方法:
吃 eat()
玩 play()
.....
创建对象
在代码中,对象是由类创建的.