09 python 中文件的读写操作
2018-07-12 本文已影响71人
小码码
1 只读模式 r
- 常用的内置函数
f=open('ceshi','r', encoding='utf-8') #打开的编码方式与文件本身的编码方式不一致时,会出现乱码
data=f.read() #读取文件内容
f.seek(0) #光标位置移到文件开头
print(f.writable()) #判断是否可写,只读模式文件不可写 False
print(f.readable()) #判断是否可读 True
print(f.readline()) #读取一行
print(f.readlines()) #读取文件所有的行,存在列表里面 ['会哈哈哈\n', '你看看扩扩\n', '下回合骄傲\n', '还行哈哈仅仅还是\n', '不能仅仅是对\n', '事件等级感觉对对对\n', '爱无畏\n', '为呼吸道萨克斯\n', '一起去哦哦亲亲\n', '爱很简单股权工业']
print(f.tell()) #光标当前位置 204
f.close() #关闭文件,以open方式打开的文件,都需要手动关闭
print(f.closed) #True 判断文件是否关闭
- seek函数
f=open('ceshi','r', encoding='utf-8')
f.seek(3,0) #从头开始,光标移动3个字节
f.seek(3,1) ##从光标的当前位置开始,光标移动3个字节
f.seek(-3,2) #从末尾开始计算,截取3个字节
seek()函数中的第一个参数代表光标移动的字节数,第二个参数表示如何移动,其中0——从头开始 1——从当前位置开始 2——从文件末尾开始
2 只写模式 w
f=open('ceshi','w', encoding='utf-8') # w在写入新的内容前,会清空文件中的原有内容
print(f.readable()) #False
print(f.read()) #报错UnsupportedOperation: not readable
print(f.writable()) #True
f.write('111111\n')
f.write('333\n444\n555\n')
f.writelines(['666\n','777\n'])
f.writelines(['666\n','777\n',1]) #报错TypeError: write() argument must be str, not int,文件的写和读都是以string的方式进行
print(f.encoding) #查看文件打开的方式
3 追加的方式打开
f=open('ceshi','a', encoding='utf-8') #追加的方式写入,新写的内容会在文件末尾
f.write('新加的内容')
4 可读可写模式
- r+ 模式
f=open('ceshi','r+', encoding='utf-8') #可读可写的方式
print(f.readable()) #True
print(f.writable()) #True
f.write('可读可写') #从光标所在的位置开始写入
print(f.closed) #False
- a+模式
可读,写的内容会在文件末尾 - w+ 模式
可读可写,写之前会清空原有内容
5 rb和wb模式
以字节的方式读和以字节方式写
# rb模式
f=open('ceshi','rb') #以字节b的方式打开,不能指定encoding方式,会报错
data=f.read()
print(data) # b'\xe7\x94\xa8with\xe7\x9a\x84\xe6\x96\xb9\xe5\xbc\x8f\xe6\x89\x93\xe5\xbc\x80\xe8\xaf\xbb\xe5\x8f\xaf\xe5\x86\x99\r\n777\r\n\xe6\x96\xb0\xe5\x8a\xa0\xe7\x9a\x84\xe5\x86\x85\xe5\xae\xb9'
print(data.decode('utf-8'))
# wb模式
f=open('ceshi','wb')
# f.write('999\n') #TypeError: a bytes-like object is required, not 'str'
f.write(bytes('你好\n',encoding='utf-8')) #你好
读取文件最后一行示例
with open('ceshi','rb') as f:
offs=-10
while True:
f.seek(offs,2)
data=f.readlines() #list类型
if len(data)>1:
print('文件最后一行是:%s'%(data[-1].decode('utf-8')))
break
offs*=2