1.小文件操作
# #-------------------以下只适合读小文件----------------------- #打开当前目录下的文本文件 filename="testfile1.txt" f=open(filename,"r",encoding="utf-8") #文件句柄,"r表示只读(默认) #.read()没有参数表示全部读完,将文件内容放到一个字符串变量中,字符串变量可能包含换行符 print(f.read()) print(f.read()) #上面已经读完,没有结果 f.close() g=open(filename,"w") #文件句柄,"w"表示重头只写(全部重新写,不是按行覆盖) g.write("My name is ZhangYuan ") g.close() k=open(filename,"a") #文件句柄,"a"表示末尾只写(尾部追加) k.write("TEST1") #写入时如果没有加入换行号" "则不换行 k.write("TEST2 ") k.write("TEST3 ") k.write("TEST4 ") k.close() # f.readline()表示逐行读取 f=open(filename,"r",encoding="utf-8") for i in range(3): print(i,f.readline()) f.close() # f.readlines()全部读取,自动将文件内容按行分成一个列表 f=open(filename,"r",encoding="utf-8") R=f.readlines() print(R,"Finish") #['My name is ZhangYuan ', 'TEST1TEST2 ', 'TEST3 ', 'TEST4 '] Finish for index,line in enumerate(R): print(index,line.strip()) #直接print(line)包括空格和换行,用strip()可去除 f.close()
2.大文件操作
#-------------------------以下适合大文件---------------------------------- print("以下适合大文件") f=open(filename,"r") #每次读取只保存一行到内存,不会累积内存 count=0 for line in f: print(count,line,"不积累内存") count+=1 f.close() #with语句自动关闭文件,下面的方式适合大文件读取 with open("testfile1.txt","r",encoding="utf-8") as f1: for line in f1: print(line,"with语句") #用fileinput模块读取大文件 import fileinput for line in fileinput.input(filename): print(line,"fileinput模块")
3.with语句,可以自动关闭打开的文件
#with语句自动关闭文件,下面的方式适合大文件读取 with open("testfile1.txt","r",encoding="utf-8") as f1: for line in f1: print(line)
4.r+,w+,a+,二进制
#硬盘上File文件的写入都是覆盖原位置,所以不存在直接性的在指定光标位置插入,除非进一步处理 #文件先读后写(追加) f=open(filename,"r+",encoding="utf-8") print("first",f.readline()) print("second",f.readline()) f.write(" ABCDEFG") #在文件最后写入,不是插入 f.close() # #文件先写后读:w+模式,会覆盖全部文件 # print("---先写后读---") # f=open(filename,"w+",encoding="utf-8") # f.write(" 先写后读") # print(f.readline(),"先写后读") #在最后追加,所以读取内容为空 # print(f.readline(),"先写后读") #在最后追加,所以读取内容为空 # f.close() # #文件先追加后读:a+模式 # f=open(filename,"a+",encoding="utf-8") # f.write(" 先追加后读") #在文件最后写入,不是插入 # print(f.readline(),"a+模式") #在最后追加,所以读取内容为空 # print(f.readline(),"a+模式") #在最后追加,所以读取内容为空 # f.close() #以二进制方式 print("---二进制---") f=open(filename,"rb") #二进制不能传递encoding="utf-8"参数 print(f.readline()) print(f.readline()) print(f.readline()) f.close() g=open(filename,"ab") g.write(" Hello World ".encode()) g.close()
5.强制刷新
#强制刷新(确认下内存或缓存中的数据已经写入硬盘,有时候写入的数据会保存到缓存,出问题就不能保存在硬盘了) print(f.flush()) f.close()
6.其他操作
#f.tell(),f.seek()光标操作 filename="testfile1.txt" f=open(filename,"r",encoding="utf-8") print(f.tell()) #按字符来计数返回file读取位置---0 print(f.readline()) print(f.tell()) #按字符来计数返回file读取位置---22 f.seek(0) #光标回到0 print(f.tell()) #---0 #返回编码方式 print(f.encoding) #截断前20个字符保留,其余删除。不输入则全部清空 # f=open(filename,"a",encoding="utf-8") #如果是"w",表示file以新文件打开,里面没有内容,截断内容只能用"a" # f.truncate(20) #截断前20个字符保留(跟光标位置无关) # f.close()