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的方式不能用encoding data= 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默认处理显示成\n with 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 = -3 n = 0 while True: f.seek(offsets,2) data = f.readlines() if len(data)>1: #如果取到2行以上 print("这是最后一行:" ,data[-1].decode("utf-8")) #data列表里是二进制,需要解码 break offsets*=2
第一行 第二行 第三行 第四行 最后一行
这是最后一行: 最后一行