文件读写
一. 基本概念
- 文件 file:
- 文件是用于数据存储的单位;
- 文件通常用来长期存储数据;
- 文件中的数据是以字节为单位进行顺序存储的;
- 文件的操作流程:
- 打开文件;
- 读写文件;
- 关闭文件
- 备注:任何的操作系统,同一个应用程序同时打开文件的数量有最大数限制,所以在用完文件后需要关闭
- 文件的打开函数:open(file, mode='rt') # 用于打开一个文件对象,如果打开文件失败,则会触发异常;
- 文件的关闭方法:F.close() # 关闭文件,释放系统资源
- 文本文件操作模式:
- 模式字符:'t' (默认);
- 默认文件中存储的数据为字符数据,以行为单位分隔,在python中内部统一用'\n'作为换行符进行分隔;
- 对文本文件的读写需要用字符串(str)进行读取和写入数据;
- 各操作系统的换行符:Linux: '\n',windows: '\r\n';
- 备注:在文本文件模式下,各操作系统的换行符在读入python内部时,换为字符'\n'
- 文件的迭代读取:open函数返回的文件流对象是可迭代对象,而且是个迭代器:
- 写文件文件模式:'w', 'x', 'a'
- 二进制文件操作:默认文件中存储的都是以字节为单位的数据,通常有人为规则格式,需要以字节为单位进行读写
(xxd 文件名 | head 以二进制形式查看文件前10行)
- f.read()的返回类型:
- 对于文本模式('t')打开的文件,返回字符串(str);
- 对于二进制模式('b')打开的文件,返回字节串(bytes)
- f.write(x):
- 对于文本模式,x必须为字符串;
- 对于二进制模式,x必须为字节串;
- f.seek()方法:用来改变当前文件的读写位置
- f.seek(偏移量, 相对位置);
- 偏移量:大于0的数代表向文件尾方向移动;小于0的数代表向文件头方向移动;
- 相对位置:
0 代表从文件头开始偏移
1 代表从当前位置开始偏移
2 代表从文件尾开始偏移
- f.tell()方法:返回当前文件读写位置
- 小结:
- 二进制文件操作模式'b' :可以读取任意格式的文件,但需要去了解相应的文件格式,也可以是自己定义的格式;
- read: read, readline, readlines;
- write: write, writelines
- 二进制文件通常才会用到seek和tell
myfile.bin 文件内容如下:
二. 汉字编码
- 汉字常用的2种编码方式
- 国标系列(windows常用):
- GB18030 (二字节或四字节编码,共27533个汉字)相比GBK多出的部分使用的是四字节编码;
- GBK(二字节编码,共21003个汉字);
- GB2312(二字节编码,共6763个汉字)
- 国际标准 (Linux,Mac OS X,IOS,Android等常用):
- UNICODE32(UNICODE16)<-----> UTF-8
- 说明:
- python3的字符串存储的是unicode编码,但要存储在外部(磁盘,网络等)的时候,需要encode编码;
- python 编码(encode)字符串:
- 'gb2312'
- 'gbk'
- 'gb18030'
- 'utf-8'
- 'ascii'
3. 编码注释:在python源文件第一行或第二行写入如下内容是告诉解释执行器,此文件的编码类型是什么,如:
1. # -*- coding: gbk -*- 设置源文件编码格式为GBK
2. # -*- coding: utf-8 -*- 设置源文件编码格式为utf-8(python3默认使用的编码方式为utf-8 )
三. 总结
- 各类模式
符号 | 含义 |
't' | 以文本模式打开,是默认的文件打开方式; |
'b' | 二进制模式打开; |
‘r’ | 以只读的形式打开,是默认的打开方式; |
'w' | 以写的方式打开,会删除文件中原有的内容; |
'a' | 以追加的方式打开文件,原有内容不会删除; |
'x' | 创建新文件,文件已存在时,将触发异常; |
- 文本文件操作模式:
- 默认文件中存储的数据为字符数据,以行为单位分隔,在python中内部统一用'\n'作为换行符进行分隔;
- 对文本文件的读写需要用字符串(str)进行读取和写入数据
- 二进制文件操作模式:
- 默认文件中存储的都是以字节为单位的数据,通常有人为规则格式;
- 需要以字节为单位进行读写
- open()函数:
- open(file, mode='rt') #用于打开一个文件对象,如果打开文件失败,则会触发OSError;
- open()函数返回一个表示文件的对象,可作为迭代器,结合next()函数使用,每次返回一行内容,停止迭代时触发StopIteration
- 常用方法:
方法名 | 作用 |
read(size) |
1.读取size个字符(缺省时读取全部内容)返回一个字符串; 2.每次读取时在上一次的位置继续向下读,到达文件末尾则返回空字符串; 3.二进制模式下,读取和返回的都是字节串 |
readline() |
1.读取1行,返回一个字符串; 2.每次读取一行,到达文件末尾则返回空字符串; 3.二进制模式下,读取和返回的都是字节串 |
readlines() |
1.每行内容作为一个字符串,返回一个列表; 2.二进制模式下,返回一个字节串列表 |
write(x) |
1.对于文本模式,X必须为字符串; 2.对于二进制模式,x必须为字节串; 3.返回写入的字符数 |
writeslines(列表) | 顺序写入列表内的每个元素 |