文件操作

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内统一用'\n'作用换行符进行分隔

各操作系统的换行符:
Linux换行符: '\n'
Windows 换行符: '\r\n'
旧的Macintosh换行符: '\r'
新的Mac OS 换行符: '\n'
文件流对象常用的方法见:
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

文件的迭代读取
文件流对象是可迭代对象,迭代过程将以换行符'\n'作用分隔符依次获取

示例:
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) |

 

posted @ 2019-04-16 21:50  全宇宙第一帅  阅读(208)  评论(0编辑  收藏  举报