文件操作

文件操作

对文件操作流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件 

现有文件如下 :文件名为“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)
View Code
#其他的一些操作
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())#去空行
View Code

 既然readlines()方法效率低下,那么问题来了,我们应该用什么高效的方法呢?

#high
count=0
for line in f: #一行行地读,并且内存里只保存一行
    if count==9:
        print("-----我是分割线-------")
        count += 1
        continue
    count+=1
    print(line)
f.close()

#此时f不像上面readlines那样是个列表,不能通过枚举的方法打印所需的行,只能通过自定义一个计数器
View Code

#w 只写模式 倘若被写入文件中有内容,则会被覆盖掉
f1=open('song2','w',encoding='utf-8')
f1.write('苍茫的天涯是我的爱\n')
f1.write('绵绵的青山脚下花正开\n')
View Code

# a=append 后面追加 默认不能读
f2=open('song2','a',encoding="utf-8") #文件句柄 追加
f2.write("什么样的节奏是最呀最摇摆\n")
# f2.flush()#刷新
View Code
# 读写模式 r+ 以读和追加的方式
f=open('song2','r+') #文件句柄 读&追加
print(f.readline())
print(f.readline())
f.write("什么样的节奏是最呀最摇摆\n")
f.write("什么样的歌声...\n")
f.close()
View Code
#写读模式 w+
f3=open('song3',"w+",encoding='utf-8') #文件句柄 写读
f3.write("""
静静地陪你走了好远好远

连眼睛红了

都没有发现

听着你说你现在的改变

看着我依然最爱你的笑脸

这条旧路依然没有改变
""")
f3.seek(2)
print(f3.readline())
f3.close()
View Code

#追加读 a+ 既能追加也可以读
f4=open("song3","a+",encoding='utf-8')
f4.write("""
以往的每次路过都是晴天

想起我们有过的从前

泪水就一点一点开始蔓延
""")
f4.seek(30)
print(f4.readline())
f4.close()
View Code
#二进制读
f5=open('song','rb') #文件句柄 二进制文件
print(f5.readline())
print(f5.readline())
print(f5.readline())
f5.close()
View Code
#二进制写入
f6=open('song4','wb') #文件句柄 二进制文件
f6.write("Hello binary !\n".encode())
f6.close()
View Code
#修改文件
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()
View Code

 

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

 

posted @ 2017-02-15 10:37  似是故人来~  阅读(256)  评论(0编辑  收藏  举报