python 文件与编码
文件打开模式
r: 只读模式(默认)
w: 只写模式(不可读,不存在则创建,存在则删除内容;)
a: 追加模式(可读,不存在则创建,存在则只内容;)
r+: 读写模式
相当于追加模式;相比较a,r+表示追加+读
可以定长修改;文件开头改
w+: 写读模式
会先清空原文件内容,再写入新内容;
a+: 追加写模式
可文件尾部改;
rU:
将\r \n \r\n自动转换成\n;
rb:
二进制的模式读取;不进行转码与编码,直接打印字节类型;
主要用于网络传输;有助于解决乱码问题;bytes对应于ascii里面的数字;最后需要再解码;
以二进制模式打开文件,不能声明encoding
示例:
>>> a = bytes('abc',encoding='utf-8')
>>> a
b'abc'
>>> a[0]
97
>>> a[1]
98
wb:
在写入的时候,必须编码:f.write('城'.encode('gbk'))
以二进制写入文件,必须写入bytes格式;
文件使用方法
open()
encoding如果不声时,默认使用操作系统的编码来解释文件;
f.tell()
返回光标位置;
f.seek(10)
移动光标到第10个字节
print(f.read(5))
表示读取5个字符;
注:
一个汉字占三个字节;f.seek(10)移动的是字节;f.read(5)读的是字符;
f.fileno()
返回一个nummber,number是操作系统里所有打开的文件的一个下标;又称为文件描述符;
f.isatty()
判断是否为一个终端;
<br>示例:
>>> import sys
>>> sys.stdout.write('fsdjklj')
fsdjklj7 #数字表示显示打印了几个字符;
f.read():
文件内容全部读完
f.readable()
判断文件是否可读
f.readall()
读所有
f.seekable()
seek只适用于文本文件;
f.truncate()
用于r+或a+;表示默认从开头进行截断;结果在文件中显示;不能使用seek在某一位置截断;
f.flush()
将内存缓存区中的文件内容刷写到文件中去;常用于打印实时日志时;
编码
python2:默认编码assci
#-*-coding:utf-8 -*- 告诉py的解释器,后面的这段代码请用utf8来解释
python3:文件的默认编码是utf-8
解释器编码是unicode,文件加载到内存后会自动解码成unicode,同时把字符转换成bytes = 8bits,只有在保存下来的时候需要编码
查看python默认的字编码命令:
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
不同国家的字符编码进行正常显示,先将本机的字符编码进行解码到unicode,读取时再将unicode编码转换成自己的字符编码;
注:
python2与python3中编码的区别:
python2 str == python3 bytes
python3 str == unicode
python3中的bytes格式是一个单独的数据类型;
编码解码:
windows默认编码gbk, 默认可支持unicode & gbk
windows默认编码utf8,默认可支持unicode & utf8
所有的程序在内存里默认是unicode
python2: 解码是必须的,编码成gbk不是必须的。
python2: 在linux上,如果是gbk --> utf8 ,解码是必须的,编码成utf-8这个动作不是必须的。
python3:不需要解码,直接编码就可以。