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   判断文件是否关闭
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 可读可写模式

f=open('ceshi','r+', encoding='utf-8')    #可读可写的方式
print(f.readable())        #True
print(f.writable())        #True
f.write('可读可写')     #从光标所在的位置开始写入
print(f.closed)         #False

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
上一篇下一篇

猜你喜欢

热点阅读