day15回顾
迭代器
iter(iterable) 返回迭代器
next(iterator) 返回可迭代对象提供的数据,当没有数据时触发StopIteration异常通知
生成器:
两种:
生成器函数
生成器表达式
生成器函数
def 函数():
#语句内部有
yield语句
gen = myyield()
it = iter(gen)
next(it) 才让 myyield()函数执行,并遇到yield语句
生成器表达式:
(x ** 2 for x in range(10) if xxx)
迭代工具函数:
zip(iter1, *iterable)
enumerate(iterable, start=0)
字节串bytes(不可变) / 字节数组 bytearray(可变)
b'',bytes() / bytearray(b''),bytearray()
b'abc',bytes(b'abc') / bytearray(b'abc')
bytes(10) / bytearray(10)
bytes('abc', 'utf-8') / bytearray('abc', 'utf-8')
bytes(range(65, 90)) / bytearray(range(65, 90))
+ += * *=
< > <= >= == !=
in / not in
索引 / 切片
len(x) / max(x) / min(x) /sum(x) / any(x) / all(x)
day16笔记
文件 File
什么是文件
文件是用于数据存储的单位
文件通常用来长期存储数据
文件中的数据是以字节(byte)为单位进行存储的
文件的操作流程:
1. 打开文件
2. 读/写文件
3. 关闭文件
注:任何操作系统,一个应用程序同时打开文件的数量有最大数限制
文件的打开函数:
open(file, mode='rt') 用于打开一个文件,返回此文件对应的文件流对象,如果打开失败则会触发OSError错误
文件的关闭方法:
F.close() # 关闭文件,释放系统资源
示例见:
file_open.py
文本文件的操作:
文本文件的模式字符 't'
说明:
1. 对文本文件的读写需要用字符串str 进行读取和写入数据
2. 默认文件中存储的都是字符(文字)数据,在读写中会自动进行编码转换操作
3. 以行为单位分隔,在python内统一用' '作用换行符进行分隔
各操作系统的换行符:
Linux换行符: ' '
Windows 换行符: ' '
旧的Macintosh换行符: ' '
新的Mac OS 换行符: ' '
文件流对象常用的方法见:
python_base_docs_html/文件.html
练习:
自己写一个文件 'info.txt' 内部存一些文字信息如下:
张三 20 100
李四 21 96
小王 20 98
注:
以上信息用空格作用分隔符分开
写程序将这些数据读取出来,并以如下格式打印出来:
张小 今年 20 岁,成绩是: 100
李四 今年 21 岁,成绩是: 96
小王 今年 20 岁,成绩是: 98
文本文件读方法:
F.readline()
F.readlines()
F.read([字符数或字节数])
文本文件的写方法
模式字符串: 'w'/'x'/'a'
F.write(字符串)
F.writelines(字符串列表)
示例见:
file_write_text.py
文件的迭代读取
文件流对象是可迭代对象,迭代过程将以换行符' '作用分隔符依次获取
示例:
f = open('mynote.txt', 'rt')
for line in f: # f绑定的文件流对象是可迭代对象
print(line)
练习:
1. 写程序,读入任意行文字,当输入空行时结束输入
先将这些读入的文字存入列表中, 然后再将列表里的内容存入到'input.txt'文件中
2. 写程序,从上题的input.txt中读取之前输入的数据,读取到列表中,再加上行号进行输出
标准输入输出文件:
sys.stdin 标准输入文件(默认为键盘设备)
ctrl + d 快捷键是让键盘输入文件结束符
sys.stdout 标准输出文件 (默认为屏幕终端)
sys.stderr 标准错误输出文件(默认为屏幕终端)
模块名: sys
说明:
1. 标准文件不需要打开和关闭就可以使用
2. 每一个python程序启动后都会有以上三个文件供我们使用
示例见:
stdin.py
stdin2.py
stdout.py
二进制文件操作:
模式字符: 'b'
默认文件中存储的都是以字节为单位的数据,通常有人为的格式
对二进制文件的读写需要用字节串(bytes) 进行操作
常用的操作方法:
F.read([字节数/字符数])
对于文本文件, F.read()返回类型为字符串str
对于二进制文件,F.read()返回类型为字节串bytes
F.write()
同上,对于二进制文件,写入的数据为字节串bytes或bytearray
F.tell() 方法
返回当前文件流的读写位置(从0开始,以字节为单位)
F.seek方法
作用:
设置文件的读写位置
格式:
F.seek(偏移量, whence=相对位置)
偏移量
大于0代表向文件尾方向移动
小于0代表向文件头方向移动
相对位置
0 代表从文件头开始偏移
1 代表从当前位置开始偏移
2 代表从文件尾开始偏移
示例见:
seek.py
汉字编码(只讲两种)
问题:
十个汉字占多少个字节?
20个(GBK编码)
30个(UTF-8编码)
国标编码
GB18030(二字节或四字节编码, 27533个字)
GBK(二字节编码 21003个字)
GB2312(二字节编码 6763个字)
(Windows上常用)
国际标准:
UNICODE <---> UTF-8
(Linux / Mac OS X / IOS / Android常用)
UTF-8 (8-bit Unicode Transformation Format)
python的编码(encode)字符串:
'gb2312'
'gbk'
'gb18030'
'utf-8'
'ascii'
编码注释:
在源文件中第一行或第二行写入如下内容为编码注释
# -*- coding:gbk -*-
# 设置源文件编码格式为:gbk
或
# -*- coding:utf-8 -*-
# 设置源文件编码格式为:utf-8
作用:
告诉解释执行器,当前的.py文件的编码格式是什么
练习:
1. 写程序,让用户输入一系列整数,当输入小于零的数时结束输入
1) 将这些数字存于列表中
2) 将列表中的数字写入到文件numbers.txt中
(提示:需要将整数转为字符串或字节串才能存入文件中)
2. 写程序,将上题的numbers.txt中的整数读入到内存中形成列表
计算这些数中的最大值,最小值和它们的和
3. 写程序,实现复制文件功能
要求:
1) 要考虑关闭文件问题
2) 要考虑超大文件复制问题
3) 要能复制二进制文件(如:/usr/bin/python3 等文件)
4. 将学生信息管理程序添加两个功能:
| 9) 保存信息到文件(si.txt) |
| 10) 从文件中读取数据(si.txt) |