文件操作
文件操作
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
现有文件如下 :文件名为“song”
1 hiding from the rain and snow 2 藏身于雨雪之中 3 trying to forget but i won't let go 4 努力忘记,但我怎能就这样离去 5 looking at a crowded street 6 看着熙熙攘攘的街道 7 listening to my own heart beat 8 却只能听见自己的心跳 9 so many people all around the world 10 这么多的人在世界上 11 tell me where do i find someone like you girl 12 请告诉我在哪里可以找到像你一样的女孩 13 take me to your heart take me to your soul 14 将我留存心间与你的灵魂相伴 15 give me your hand before i'm old 16 给我你的手,在我老去之前 17 show me what love is haven't got a clue 18 问情为何物在我们彼此离开前 19 show me that wonders can be true 20 问奇迹上演 21 they say nothing lasts forever 22 他们说没有什么可以天长地久 23 we're only here today 24 我们也能此时相守 25 love is now or never 26 现在或者永不回头 27 bring me far away 28 请带我一起远走
基本操作:
#r只读模式
f=open('song','r',encoding='utf-8') #打开文件,赋给文件句柄f(f实际上就是该文件的内存对象) data1=f.readline()#读一行 data2=f.read()## 读取剩下的所有内容,文件大时不要用,不一定能全读回来 print(data1) print(data2)
#其他的一些操作 f.tell()#查看文件句柄指针的位置 print(f.tell()) f.seek(0)#设置文件的当前位置偏移 print(f.tell()) print(data1) print(f.encoding)#文件的编码方式 print(f.fileno())#文件的编号 f.close()#关闭打开的文件,关闭的文件无法读取或写入更多东西
f.flush()#刷新
f.truncate()#截取,从文件句柄指针位置开始,若没有参数就清空
#f.readlines() 方法会先把所有行读到内存里 效率低下 ,一般不用
#low loop for index line in enumerate(f.readlines()): if index=9: print("------我是分割线-------") print(line.strip())#去空行
既然readlines()方法效率低下,那么问题来了,我们应该用什么高效的方法呢?
#high count=0 for line in f: #一行行地读,并且内存里只保存一行 if count==9: print("-----我是分割线-------") count += 1 continue count+=1 print(line) f.close() #此时f不像上面readlines那样是个列表,不能通过枚举的方法打印所需的行,只能通过自定义一个计数器
#w 只写模式 倘若被写入文件中有内容,则会被覆盖掉
f1=open('song2','w',encoding='utf-8') f1.write('苍茫的天涯是我的爱\n') f1.write('绵绵的青山脚下花正开\n')
# a=append 后面追加 默认不能读
f2=open('song2','a',encoding="utf-8") #文件句柄 追加 f2.write("什么样的节奏是最呀最摇摆\n") # f2.flush()#刷新
# 读写模式 r+ 以读和追加的方式
f=open('song2','r+') #文件句柄 读&追加 print(f.readline()) print(f.readline()) f.write("什么样的节奏是最呀最摇摆\n") f.write("什么样的歌声...\n") f.close()
#写读模式 w+
f3=open('song3',"w+",encoding='utf-8') #文件句柄 写读 f3.write(""" 静静地陪你走了好远好远 连眼睛红了 都没有发现 听着你说你现在的改变 看着我依然最爱你的笑脸 这条旧路依然没有改变 """) f3.seek(2) print(f3.readline()) f3.close()
#追加读 a+ 既能追加也可以读
f4=open("song3","a+",encoding='utf-8') f4.write(""" 以往的每次路过都是晴天 想起我们有过的从前 泪水就一点一点开始蔓延 """) f4.seek(30) print(f4.readline()) f4.close()
#二进制读
f5=open('song','rb') #文件句柄 二进制文件 print(f5.readline()) print(f5.readline()) print(f5.readline()) f5.close()
#二进制写入
f6=open('song4','wb') #文件句柄 二进制文件 f6.write("Hello binary !\n".encode()) f6.close()
#修改文件
f=open('song','r',encoding='utf-8') f_new=open('song_修改版','w',encoding="utf-8") for line in f: if "我" in line: line=line.replace('我','哥') f_new.write(line) f.close() f_new.close()
with语句
为了避免打开文件后忘记关闭,可以通过with管理上下文:
with open('song','r',encoding='utf-8') as f: for line in f: print(line) #如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。 #在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,如: with open('song1','r',encoding='utf-8') as f,open('song2','r',encoding='utf-8')as f1: pass