day16回顾:
迭代器和生成器
什么是迭代器
iter(可迭代对象) 返回的对象是迭代器
可以用next(迭代器) 访问可迭代对象
迭代器和生成器
什么是迭代器
iter(可迭代对象) 返回的对象是迭代器
可以用next(迭代器) 访问可迭代对象
for 语句实质 while, next, iter的组合
生成器:
两种:
生成器函数
生成器表达式
两种:
生成器函数
生成器表达式
生成器函数内部必须要有yield语句
def fx():
yield 语句
yield 语句
格式
yield 表达式
def fx():
yield 语句
yield 语句
格式
yield 表达式
yield 返回的数据将传递给 next(it)
生成器表达式
语法
(x for x in 可迭代对象 if x > 0)
语法
(x for x in 可迭代对象 if x > 0)
迭代工具函数:
zip(iter1, iter2, ....)
enumerate(iter, start=0)
zip(iter1, iter2, ....)
enumerate(iter, start=0)
enumerate 示例:
L = [3, 9, 7, 5, 1, 5, 4, 8]
for n, e in enumerate(L):
print("索引:", n, 对应的值是: e)
L = [3, 9, 7, 5, 1, 5, 4, 8]
for n, e in enumerate(L):
print("索引:", n, 对应的值是: e)
字节串 bytes 字节数组 bytearray
不可变量 --> 可变的
tuple list
frozenset set
bytes bytearray
不可变量 --> 可变的
tuple list
frozenset set
bytes bytearray
b'hello' # 字面值
bytes() bytearray()
bytes(整型可迭代对象) bytearray(整型可迭代对象)
bytes(整数n) bytearray(整数n)
bytes(字符串, encoding='utf-8') bytearray(字符串, encoding='utf-8')
bytes() bytearray()
bytes(整型可迭代对象) bytearray(整型可迭代对象)
bytes(整数n) bytearray(整数n)
bytes(字符串, encoding='utf-8') bytearray(字符串, encoding='utf-8')
字节串和字节数组的运算:
+ += * *=
< <= >= > == !=
in / not in
索引 index /切片 slice
+ += * *=
< <= >= > == !=
in / not in
索引 index /切片 slice
序列:
str, list, tuple, bytes, bytearray
str, list, tuple, bytes, bytearray
day17笔记:
bytearray 的方法:
BA代表bytearray
BA.clear() 清空字节数组
BA.append(n) 追加一个字节(n为0~255的整数)
BA.remove(value) 删除第1个出现的字节,如果没有出现,则触发ValueError错误
BA.reverse() 字节的顺序反转
BA.decode(encoding='utf-8') 将bytearray转换为字符串
BA.find(sub[, start[, end]]) 查找sub 子节数数组
BA代表bytearray
BA.clear() 清空字节数组
BA.append(n) 追加一个字节(n为0~255的整数)
BA.remove(value) 删除第1个出现的字节,如果没有出现,则触发ValueError错误
BA.reverse() 字节的顺序反转
BA.decode(encoding='utf-8') 将bytearray转换为字符串
BA.find(sub[, start[, end]]) 查找sub 子节数数组
文件:
什么是文件
文件是用于数据存储的单位
文件通常用来长期存储设置
文件中的数据是以字节为单位进行顺序存储的
内存的读写速度快/ 磁盘的读写速度慢
文件的操作步骤:
打开文件
读写文件
关闭文件
文件的打开函数 open
open(file, mode='rt') 用于打开一个文件,返回此文件流对象,如果打开失败会触发IOError错误
open(file, mode='rt') 用于打开一个文件,返回此文件流对象,如果打开失败会触发IOError错误
文件的关闭方法
F.close() # 关闭文件,释放系统资源
F.close() # 关闭文件,释放系统资源
示例见:
file_open.py
file_open.py
文件操作分为两种类型的操作:
文本文件操作
二进制文件操作
文本文件操作
二进制文件操作
文本文件模式:
mode = 't'
1. 默认文件中存储的内容为字符数据,以行为单位读取,采用系统默认的换行符进行分隔
2. 对于文本文件的读写,需要用字符串(str) 进行读取和写入数据
mode = 't'
1. 默认文件中存储的内容为字符数据,以行为单位读取,采用系统默认的换行符进行分隔
2. 对于文本文件的读写,需要用字符串(str) 进行读取和写入数据
各操作系统默认的换行符:
Linux 换行符 '\n'
Windows 换行符 '\r\n'
旧的Macintosh 的换行符 '\r'
新的Mac OS 换行符 '\n'
Linux 换行符 '\n'
Windows 换行符 '\r\n'
旧的Macintosh 的换行符 '\r'
新的Mac OS 换行符 '\n'
练习:
将如下数据用文本编辑器sublime 写入到data.txt文件中
数据如下:
小张 13888888888
小李 13999999999
小赵 13666666666
写程序读取数据,打印出姓名和电话号码,格式如下:
姓名: 小张, 电话: 13888888888
将如下数据用文本编辑器sublime 写入到data.txt文件中
数据如下:
小张 13888888888
小李 13999999999
小赵 13666666666
写程序读取数据,打印出姓名和电话号码,格式如下:
姓名: 小张, 电话: 13888888888
练习:
1. 写一个程序,读入任意行的文字信息,当输入空行时结束输入.
将读入的字符串存于列表中,然后将列表里的内容写入的文件 input.txt 中
1. 写一个程序,读入任意行的文字信息,当输入空行时结束输入.
将读入的字符串存于列表中,然后将列表里的内容写入的文件 input.txt 中
2. 写一个程序, 从input.txt中读取之前输入的数据,存入列表中.再加上行号进行打印显示
显示格式如下 :
第1行: zzzzzzz
第2行: xxxxxxx
显示格式如下 :
第1行: zzzzzzz
第2行: xxxxxxx
答案见:
write_data.py
read_data.py
write_data.py
read_data.py
二进制文件操作
打开模式 : 'b'
默认文件中存储的都是以字节为单位的二进制数据,通常有人为规定的格式,需要以字节为单位进行读写
对二进制文件的读写,需要用字节串(bytes)进行操作
打开模式 : 'b'
默认文件中存储的都是以字节为单位的二进制数据,通常有人为规定的格式,需要以字节为单位进行读写
对二进制文件的读写,需要用字节串(bytes)进行操作
F.read(n) 方法
F.readline()
F.readlines()
对于二进制文件,F.read()/F.readline返回字节串
F.readlines() 返回字节串列表
F.read(n) n代表最大字节数
F.readline()
F.readlines()
对于二进制文件,F.read()/F.readline返回字节串
F.readlines() 返回字节串列表
F.read(n) n代表最大字节数
F.write(x)方法
对于二进制文件,x必须为字节串
对于二进制文件,x必须为字节串
F.seek(offset, whence=0) 函数
offset 偏移量:
大于0的数代表向文件末尾方向移动
小于0的数代表向文件头方向移动
whence 相对位置
0 代表从文件头开始偏移
1 代表从当前位置开始偏移
2 代表从文件尾开始偏移
示例见:
seek.py
seek.py
汉字编码:
国标系列:
GB18030 (2字节或4字节编码,共27533个)
GBK (2字节编码,共21003个)
GB2312 (2字节编码,共6763个汉字)
(常用于Windows)
国际标准:
UNICODE16/UNICODE32 <<<--->>> UTF-8
(常用于Linux / Mac OS X / IOS / Android)
国标系列:
GB18030 (2字节或4字节编码,共27533个)
GBK (2字节编码,共21003个)
GB2312 (2字节编码,共6763个汉字)
(常用于Windows)
国际标准:
UNICODE16/UNICODE32 <<<--->>> UTF-8
(常用于Linux / Mac OS X / IOS / Android)
UTF-8(8-bit Unicode Transformation Format)
编码字符串:
'gb2312'
'gbk'
'gb18030'
'utf-8'
'ascii'
用于 encode和 decode方法中
'gb2312'
'gbk'
'gb18030'
'utf-8'
'ascii'
用于 encode和 decode方法中
编码注释:
在源文件的第一行或第二行写入如下格式的内容
# -*- coding:gbk -*-
或
# -*- coding:utf-8 -*-
是告诉python3解释执行器当前文件的编码是什么
在源文件的第一行或第二行写入如下格式的内容
# -*- coding:gbk -*-
或
# -*- coding:utf-8 -*-
是告诉python3解释执行器当前文件的编码是什么
练习:
1. 修改原来的学生管理系统的代码,将其为分模块
建议:
1. 把显示菜单放在一个模块内
2. 把对学生的操作放在一个模块内
3. 把主事件循环while True 选择输入放在一个模块内
2. 在菜单上添加两个功能:
| 9) 保存学生信息到文件(si.txt) |
| 10) 从文件中读取数据(si.txt) |
建议用逗号","分隔数据:
# file: si.txt
xiaozhang,21,98
xiaoli,22,100
...
| 9) 保存学生信息到文件(si.txt) |
| 10) 从文件中读取数据(si.txt) |
建议用逗号","分隔数据:
# file: si.txt
xiaozhang,21,98
xiaoli,22,100
...