文件 file
文件是用于数据存储的单位
文件通常用来长期存储数据
文件中的数据是以字节为单位进行顺序存储的
文件的操作流程
1. 打开文件
2. 读/写文件
3. 关闭文件
注: 任何的操作系统,同一个应用程序同时打开文件的数量有最大数限制,所以在用完文件后需要关闭
文件的打开函数open
open(file, mode='rt') 用于打开一个文件,返回此文件流对象,如果打开文件失败,则会触发OSError错误
文件的关闭方法:
F.close() 关闭文件,释放系统资源
文本文件操作模式
模式字符:
't' (默认)
1. 默认文件中存储的数据为字符数据,以行为单位分隔,在 python 内部统一用'\n'作为换行符进行分隔
2. 对文本文件的读写需要用字符串(str)进行读取和写入数据
各操作系统的换行符:
Linux换行符: '\n'
Windows换行符: '\r\n'
旧的Macintosh换行符 : '\r'
新的Mac OS换行符: '\n'
说明:
在文件文件模式下,各操作系统的换行符在读入python内部时转换为字符'\n'
练习:
自己写一个文件 info.txt ,内部存储一些文字信息如下:
小张 20 100
小李 18 98
小王 19 95
写程序将这些数据读取出来,打印在屏幕终端上
文件的迭代读取:
open返回的文件流对象是可迭代对象
示例:
f = open('myfile.txt')
for line in f:
print(line)
文本文件的写操作:
写文件模式有:
'w'
'x'
'a'
练习:
1. 写一个程序,输入很多人的姓名,年龄,家庭住址信息,存入文件
'infos.txt' 中
文件格式自己定义
完成输入后查看文件格式是否是你想要的格式(文本文件操作)
2. 写一个程序读入infos.txt中的内容,以如下格式打印 infos.txt中的内容
姓名: xxx, 年龄 20, 住址: XXXX
姓名: yyy, 年龄 18, 住址: YYYYYY
二进制文件操作
默认的文件中存储的都是以字节为单位的数据,通常有人为规则的格式,需要以字节为单位进行读写
F.read() 的返回类型:
1. 对于文本模式('t')打开的文件,返回字符串(str)
2. 对于二进制模式('b')打开的文件,返回字节串(bytes)
F.write(x)
1. 对于文本模式,x必须为字符串
2. 对于二进制模式,x必须为字节串
以十六进制方式查看文件内容的命令:
$ xxd 文件名
练习:
将如下数据用二进制文件操作方式写入到文件data.txt中
数据如下:
小李 1388888899
小王 1366666666
提示: b = str.encode('utf-8')
用 sublime text3 打开,看写入的内容能否被sublime识别并读出
F.seek() 方法
F.seek(偏移量, 相对位置)
偏移量:
大于0的数代表向文件尾方向移动
小于0代表向文件头方向移动
相对位置:
0 代表从文件头开始偏移
1 代表从当前位置开始偏移
2 代表从文件尾开始偏移
作用:
改变当前文件的读写位置
F.tell() 方法:
作用:
返回当前文件读写位置
小结:
文件操作的两种模式:
'b' 二进制模式
't' 文本模式
文件操作:
读 read /readline/readlines
写 write /writelines
汉字编码:
问题:
十个汉字占多少个字节
只讲两种:
国标系列:
GB18030(二字节或四字节编码,共27533个汉字)
GBK(二字节编码,共21003个汉字)
GB2312(二字节编码,共个6763汉字)
(Windows 常用)
国际标准:
UNICODE32(UNICODE16) <---> UTF-8
(Linux, Mac OS X, IOS, Android等常用)
说明:
python3的字符串内部都是用UNICODE来存储字符的
python 编码(encode) 字符串:
'gb2312'
'gbk'
'gb18030'
'utf-8'
'ascii'
编码注释:
在python 源文件第一行或第二行写入如下内容是告诉解释执行器此文件的编码类型是什么
如:
# -*- coding: gbk -*-
# 设置源文件编码格式为gbk
或
# -*- coding: utf-8 -*-
# 设置源文件编码格式为utf-8