open方法打开文件,r,只可读模式,不能写,文件的内容只能是字符串
f = open('xxx','r','encoding='utf-8')
data = f.read()#以字符串形式读取整个文件data1 = f.readlines()#列表的形式,每行为一个元素f.close()
print(f1.readable()) #判断是否可读,返回bool值
f = open('xxx','w',encoding='utf-8')#如果存在xxx文件则覆盖,如果不存在xxx文件则新建f.write('dsadasd')f.write('dsdsadaw1')#当多行write写入时需要自己加上\n换行,否则不会换行f.writelines(['dsadad3\n','dsaasda\n','dasda\n'])#写入一个列表行f.close()
a,追加模式,只追加内容,在文件的最后开始写
f = open('xxx','a',encoding='utf-8')f.write('winsdom')f.close()#追加模式 写在原文件的最后
b,对于非文本文件,我们只能使用b模式,‘b’表示以字节的方式操作(所有的文件也都是以字节飞形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jpg格式、视频文件的avi格式)
rb
wb
ab
补充:以b的方式打开文件时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
‘+’ 表示可以同时读写某个文件
‘r+’ 读写(可读,可写)
‘w+’ 写读(可读,可写)
‘a+’ 写读(可读,可写)
‘x’ 只写模式(不可读,不存在创建,存在则报错)
‘x+’ 写读(可读,可写)
‘xb’
操作文件的方法
f.read() #读取所有内容,光标移动到文件末尾f.readline() #读取一行内容,光标移动到第二行首部f.readlines() #以列表的形式读取全部内容(读取每一行,存放于列表中)f.write('11111\n22222\n') #针对文本模式的写,需要自己写换行符f.write('1111\n2222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符f.writelines(['333\n','444\n']) #文件模式的多行写入f.writelines('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式f.readable()#判断文件是否可读f.writable()#判断文件是否可写f.closed#判断文件是否关闭f.encoding#如果文件打开模式为b,则没有该属性f.flush#立刻将文件内容从内存刷到硬盘f.name
文件中的光标移动
read(3)
1、文件打开方式为文本模式时,代表读取3个字符
2、文件打开方式为b模式时,代表读取3个字节
seek,tell,truncate
1、seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
2、truncate是截断文件,所以文件的打开方式必须是可写,但是不能用w或w+的方式打开,因为那样相当于直接清空文件了,所以truncate要在r+或者a或者a+的模式下测试效果
seek实现
f = open('fly away1','rb') #使用seek(0,2)倒着读文件最后一行for i in f: offs = -10 while True: f.seek(offs,2) data = f.readlines() if len(data)>1: print('最后一行是:%s',data[-1].decode('utf-8')) break offs *= 2f.close()