一、什么是文件 file
定义 | 1.是用于数据存储的单位 |
2.通常用来长期存储数据 | |
3.文件中的数据是以字节为单位进行顺序存储的 | |
操作流程 | 1.打开文件 |
2.读/写文件 | |
3.关闭文件 | |
注 | 任何的操作系统,同一个应用程序同时打开文件的数量有最大数限制,所以在用完文件后需要关闭 |
二、文件的函数
打开函数open | |
语法 | Open(file, mode=‘rt’) |
作用 | 用于打开一个文件,返回此文件流对象,如果打开文件失败,则会触发OSError错误 Ps:文件流对象可以对文件进行操作 Ps:文件流对象是可迭代对象 |
关闭函数close | |
语法 | f.close() |
作用 | 关闭文件,释放系统资源 |
示例 file_open.py
| |
示例 file_open2.py OSError
|
三、文本文件模式
3.1 模式字符
‘t’(默认) | 1.默认文件中存储的数据为字符数据,以行为单位分隔,在python内部统一用‘\n’作为换行符进行分隔 |
2.对文本文件的读写需要用字符串(str)进行读取和写入数据 |
3.2 各操作系统的换行符
Linux | ‘\n’ |
Windows | ‘\r\n’ |
旧的macintosh | ‘\r’ |
新的mac os | ‘\n’ |
说明 | 在文件模式下,各操作系统的换行符在读入python内部时转换为字符‘\n’ |
示例 file_read_text.py
| |
示例file_readline_text.py
|
3.3 文件的迭代读取
Open返回的文件流对象是可迭代对象 | |
示例 | 交互模式下: f = open("myfile.txt") for line in f: #line= f.readline() print(line) |
3.4 文本文件的写操作
‘w’ | 以只写方式打开,删除原有文件内容; 若文件不存在,则创建并打开 |
示例 file_write_text.py
| |
‘x’ | 有就报错,没有就创建 |
‘a’ | 以只写文件打开一个文件,如果有原文件则追加到文件末尾 |
示例 file_write_text_append.py
|
四、 二进制文件模式
4.1 操作
默认的文件中存储的都是以字节为单位的数据,通常有人为规则的格式,需要以字节为单位进行读写 | |
f.read()返回类型 | 1.对于文本模式(‘t’)打开的文件,返回字符串(str) |
2.对于二进制模式(‘b’)打开的文件,返回字节串(bytes) | |
f.write(x) | 1.对于文本模式,x必须为字符串 |
2.对于二进制模式,x必须为字节串 | |
以十六进制方式查看文件内容的命令: | $ xxd 文件名 |
示例 file_write_binary.py
| |
file_read_binary.py
|
4.2 方法
f.seek(偏移量offset,相对位置whence) | |
作用 | 改变当前文件的读写位置 |
偏移量 | 大于0代表向文件尾方向移动 |
小于0代表向文件头方向移动 | |
相对位置 | 0代表从文件头开始偏移 |
1代表从当前位置开始偏移 | |
2代表从文件尾开始偏移 | |
注: | seek通常对二进制模式打开的文件进行操作 |
f.tell() | |
作用 | 返回当前文件读写位置(整数) |
五、小结
文件操作的两种模式
‘b’ | 二进制模式,可以对图片、音频进行读写; 以字节为单位,所以可以用seek |
‘t’ | 文本模式,对字符串进行读写; 以行为单位,所以不能用seek |
文件的操作方法
读 | read (n=-1) /readline() /readlines() |
写 | write(x) /writelines(列表) |
六、汉字编码
A.问题 | 10个汉字占多少个字节? | |
| 20 30 40都对,编码方式不一样; 20是gb系列(中国国标),30是utf-8(国际通用); | |
B.其中两种分类 | ||
国标系列 | GB18030(二字节或四字节编码,共27533个汉字) GBK(二字节编码,共21003个汉字) GB2312(二字节编码,共6763个汉字) (Windows常用) | |
国际标准 | UNICODE32(UNICODE16) <------> utf-8 (Linux, Mac OS X, IOS, Android等常用) | |
说明 | Python3的字符串内部都是用Unicode来存储字符 | |
C. python编码(encode)字符串 | ||
‘gb2312’ | ||
‘gbk’ | ||
‘gb18030’ | ||
‘utf-8’,更通用,包含ASCII | ||
‘ascii’,英文 | ||
D.编码注释 | ||
在python源文件第一行或第二行写下如下内容是告诉解释执行器此文件的编码类型是什么 | ||
# -*- coding: gbk -*- | #设置源文件编码格式为gbk | |
# -*- coding: utf-8 -*- | #设置源文件编码格式为utf-8 | |