zoukankan      html  css  js  c++  java
  • 文件操作

    文件操作

    对文件操作流程

    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('苍茫的天涯是我的爱
    ')
    f1.write('绵绵的青山脚下花正开
    ')
    View Code

    # a=append 后面追加 默认不能读
    f2=open('song2','a',encoding="utf-8") #文件句柄 追加
    f2.write("什么样的节奏是最呀最摇摆
    ")
    # f2.flush()#刷新
    View Code
    # 读写模式 r+ 以读和追加的方式
    f=open('song2','r+') #文件句柄 读&追加
    print(f.readline())
    print(f.readline())
    f.write("什么样的节奏是最呀最摇摆
    ")
    f.write("什么样的歌声...
    ")
    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 !
    ".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
  • 相关阅读:
    Java 并发工具包 java.util.concurrent 用户指南
    Java 序列化Serializable详解(附详细例子)
    Spring之FactoryBean .
    《用chsh选择shell》-linux命令五分钟系列之十二
    《vi中的替换艺术》-linux命令五分钟系列之十一
    0-1背包问题
    Java关键字final、static使用总结
    《作业控制系列》-“linux命令五分钟系列”之十
    《zip命令》-linux命令五分钟系列之九
    《bunzip2命令》-linux命令五分钟系列之八
  • 原文地址:https://www.cnblogs.com/freely/p/6286481.html
Copyright © 2011-2022 走看看