在open函数打打开文件时,要注意编码格式,open默认的编码格式与机器的编码格式相同
需要加上编码格式,
f = open("你好",encoding="utf-8") print(f.read())
#r,w,a
readlines按行读取全部内容,存放在一个列表中
writelines写入的是列表,write写入的是字符串,写入的必须是字符串,不能使数字等其他内容
a是追加操作,
r+可读可写,w+,a+都是可读可写
with方式打开文件,不需要close
with open('a.txt','w') as f: f.write('11111\n')
b表示以字节的方式操作
with open('a.txt','w') as f: f.write('11111\n') f.write("你好,王大胖") f = open('a.txt','rb')#b的方式不能指定编码 data = f.read() print(data) print(data.decode('utf-8'))#想看到原始的字符显示方式,需要解码wb写入时需要写入bytes,需要使用bytes函数来转换为二进制形式的
>>> bytes("hello",encoding='utf-8')
b'hello'
>>> f = open('test.txt','wb')
>>> f.write(bytes('hello\n',encoding='utf-8'))
6
>>> f.close()
>>> f = open('test.txt'.'wb')
>>> f.write("你好".encode('utf-8'))
二进制文件形式可以跨平台,linux平台下默认都是文件
f.flush(),刷新,把内存中的数据刷新到硬盘中
f.tell(),显示光标当前所在的位置,光标的移动是以字节为单位的
f.seek()用来控制光标的移动,按字节来移动 f.seek(3),光标移动三个字节
read()方法读取的是字符,这个要注意区分
f.truncate(10) 文件截取,不能以W方式来打开文件,r,b方式都可以,需要打开文件来截取
seek的高级用法
seek默认是从开始的位置把光标向后移动,seek有三种模式,一种是默认的从文件起始处移动光标,seek(10,0),第二个参数为0,另一种是seek的第二个参数为1表示从相对位置开始移动光标,当seek的参数为2时,表示倒着移动光标,此时移动的字节个数也需要是负数。f.seek(-10,2)代码示例
大文件读取时只要读取最后一行文件时的方法
f = open("seek.txt",'rb') 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*=2