1 打开文件,将文件句柄赋值给一个变量
2 拿句柄对文件进行操作
3 关闭文件
将一个文件第一行写道另外一个文件
f = open("test","r",encoding="utf-8") # open找的是系统的编码
x = f.readlines()
f.close()
f1 = open("test1","w",encoding="utf-8")
f1.write(x[0])
f1.close()
with open("test","r",encoding="utf-8") as f,\open("test1","w",encoding="utf-8") as f1: #with open不用close()x = f.read()f1.write(x)
北京182 iloveyoubeijing111
with open("test","rb") as f :#b的方式不能用encodingdata= f.read()print(data)
b'\xe5\x8c\x97\xe4\xba\xac182\r\niloveyoubeijing111\r\n'
\r\n代表回车,字母和数字可以直接显示,汉字用2进制代替,文件是utf-8格式,所以一个汉字三个字节
print(data.decode("utf-8"))
北京182 iloveyoubeijing111
with open("test","wb") as f:x = "我爱北京天安门"f.write(bytes(x,encoding="utf-8"))#f.write(bytes(x.encode("utf-8")))#效果一样
f.encoding表示的是文件打开的编码,如果不知道文件编码是什么,不知道怎么打开,可以用latin-1试一下
我爱北京天安门我爱北京天安门 你好么 我很好
with open("test","r",encoding="utf-8") as f:print(f.readlines()) #windows上回车\r\n占2个字符。python默认处理显示成\nwith open("test","r",encoding="utf-8",newline="") as f:print(f.readlines()) #windows上回车\r\n占2个字符。python默认处理显示成\n
['我爱北京天安门我爱北京天安门\n', '你好么\n', '我很好'] ['我爱北京天安门我爱北京天安门\r\n', '你好么\r\n', '我很好']
with open("test","r",encoding="utf-8") as f:f.readline()print(f.tell()) #光标位置处,即移动的字节处f.readline()print(f.tell())
# 3*14+2=44 # 3*3+2+44=55
f.seek(3) #移动光标到第3个字节之后,print(f.tell())print(f.readline()) #如果移动的不是3的整数倍,会报错,因为utf-8无法解码
3 爱北京天安门我爱北京天安门
print(f.read(4)) #read读的是字符
f.truncate(5) #截取0-5字节并保留,所以一定要是w模式 r+.a+,w可以,w+不行
print(f.readlines())
seek(a,0)从头开始seek,seek(a,1)从当前光标seek,seek(a,2)从后向前seek,2的时候a需要是负数,文件打开模式需要带b
print last sentence of the file
with open("test","rb") as f:offsets = -3n = 0while True:f.seek(offsets,2)data = f.readlines()if len(data)>1: #如果取到2行以上print("这是最后一行:" ,data[-1].decode("utf-8")) #data列表里是二进制,需要解码breakoffsets*=2
第一行 第二行 第三行 第四行 最后一行
这是最后一行: 最后一行