zoukankan      html  css  js  c++  java
  • Python基础之(文件操作)

    一、文件操作基本步骤:

      一般需要经历如下步骤:

    • 打开文件
    • 操作文件

    示例:

    #1. 打开文件,得到文件句柄并赋值给一个变量
    f=open('1.txt','r',encoding='utf-8') #默认打开模式就为r
    
    #2. 通过句柄对文件进行操作
    data=f.read()
    
    #3. 关闭文件
    f.close()
    

    二、文件的打开模式

    文件句柄 = open(‘文件路径’,‘模式’,encoding=“编码”)

    打开文件的模式有:

    • r,只读模式(默认)。
    • w,只写模式。(不可读;不存在则创建;存在则删除内容重新写入;)
    • a,追加模式。(可读;   不存在则创建;存在则只追加内容;)

    ‘+’模式(就是增加了一个功能)

    • r+, (读写)   先读后写即追加;先写后读,重头开始写,然后从光标开始读
    • w+,(写读)   先写后读,写入后读出光标后面
    • a+, (写读)   先追加,然后读出光标后面内容

    ps:常用的也就是r+

    "b"表示处理二进制文件(如:发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

    • rb
    • wb
    • ab

    三、常用操作方法:

    f = open("1.txt","r+",encoding="utf-8")
    f.read()  #读
    f.write(data) #写
    f.tell() #文件光标位置
    f.seek(10) #控制光标移动
    f.seek(-10,2) #2为倒着读10个字符
    f.flush()  #刷新
    f.truncate(10)  #截取0-10位置 写操作
    f.readline()  #读出一行
    f.readlines() #按行全部读出
    f.close() #关闭文件
    

    四、With

    为了避免打开文件后忘记关闭,可以通过管理上下文,即:

    with open('1.txt','r') as f:
        for i in f:
            print(i)   

     或者打开多个文件:

    with open('1.txt') as f,open('2.txt','w') as f1:
        for i in f:
            f1.write(i)

    ps:

    打开一个文件包含两部分资源:操作系统级打开的文件+应用程序的变量。在操作完毕一个文件时,必须把与该文件的这两部分资源一个不落地回收,回收方法为:
    1、f.close()  回收操作系统级打开的文件
    2、del f      回收应用程序级的变量
    其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件还没有关闭,白白占用资源,而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close(),但是为了避免遗忘,还是推荐使用With

    五、文件的修改:

    文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式:

    5.1、全部加载到内存,在内存里修改好后覆盖到硬盘

    import os  # 调用系统模块
    
    with open('1.txt') as f,open('1.txt.bak','w') as f1:
        data=f.read()   #全部读入内存,如果文件很大,会很卡
        data=data.replace('789','xxx') #在内存中完成修改
    
        f1.write(data) #一次性写入新文件
    
    os.remove('1.txt')  #删除原文件
    os.rename('1.txt.bak','1.txt')   #将新建的文件重命名为原文件
    

    5.2、将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件

    import os
    
    with open('1.txt') as f,open('1.txt.bak','w') as f1:
        for i in f:
            a = "xxx"
            if a in i:
                i = i.replace("xxx","sss")
            f1.write(i)
    
    os.remove('1.txt')
    os.rename('1.txt.bak','1.txt')

    ps:推荐使用后者

  • 相关阅读:
    2级联动下拉列表写法
    select选中获取索引三种写法
    判断设备-安卓|苹果|微信
    限制输入字符个数的jq插件
    面试题:1.清空字符串前后的空格;2.找出出现最多的字符
    css3玩转各种效果【资源】
    利用jquery.touchSwipe.js实现的移动滑屏效果。
    【leetcode刷题笔记】Letter Combinations of a Phone Number
    【leetcode刷题笔记】Linked List Cycle
    【leetcode刷题笔记】Length of Last Word
  • 原文地址:https://www.cnblogs.com/crazyjump/p/10045100.html
Copyright © 2011-2022 走看看