Python day09
字符编码
python3里,默认用的是utf-8读取文件只会将unicode格式的二进制数字转成字符,其余编码格式均不转换,存为二进制数字,所以在python3中,永远无法查看Unicode格式的二进制,但是可以在python2中可以看到,python2中用的是ASCII码,若想用Unicode格式的编码,可以在字符串前面加u如[u’你好’]。而要是想要不乱码,要在文件第一行注明文件写入的字符编码。
文件处理
在Python中打开文件,得到文件句柄并赋值给一个变量是以下列方式进行的
f=open('a.txt','r',encoding='utf-8')#默认打开模式就为r
操作文件的方法
read() #读取所有内容,光标移动到文件末尾
readline() #读取一行内容
readlines() #读取每一行内容,存放于列表中
write("hehe\n嘻嘻\n") #写入,需要自己写换行符
writelines(["hehe\n",“嘻嘻\n”]) #向文件中写入一序列的字符串。这一序列字符串可以是由迭代对象产生的,如一个字符串列表
readable() #文件是否可读
writable() #文件是否可写
closed #文件是否关闭
encoding #指定的编码格式编码字符串。如果文件打开模式为b,则没有该属性
flush() #立刻将文件内容从内存刷到硬盘。一般不用会降低I/O效率
打开文件的模式:
文本模式t:
r :只读模式【默认模式,文件必须存在,不存在则抛出异常】
w:只写模式【不可读;不存在则创建;存在则清空内容】
a: 追加写模式【不可读;不存在则创建;存在则只追加内容】
对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式
rb
wb
ab
注意!以b方式打开时,读取到的内容是字节类型,不能指定编码
需要了解的部分
“+” 表示可以同时读写某个文件
r+, 读写【可读,可写】
w+,写读【可读,可写】
a+, 写读【可读,可写】
x, 只写模式【不可读;不存在则创建,存在则报错】
x+ ,写读【可读,可写】
with上下文管理
在执行完子代码块后,with 会自动执行f.close()
with open('a.txt','w') as f:
pass
也可以使用with同时打开多个文件,用逗号分隔开即可。
with open('a.txt','r') as f,open('b.txt','w') as f1:
data = f.read()
f.write(data)
文件内光标移动
read(3)有两种含义:
在文件打开方式为文本模式时,代表读取3个字符。
而在文件打开方式为b模式时,代表读取3个字节。
seek()
seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的。
truncate()
truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为会直接清空文件,所以truncate要在r+或a或a+等模式下测试效果。
文件的修改
文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,所以我们平时看到的修改文件,都是模拟出来的效果,而实现方式有两种。
一、将硬盘存放的该文件的内容全部加载到内存,文件中的数据在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)。
二、将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖旧文件。