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

    python文件高级操作和注意事项等等

    文件过大保护

    由于read是一次性读取文件所有的内容,如果文件100G,内存就会吃不消,所以推荐使用read(size)一次读取指定字节/字符(根据rb,或者rt指定不同的读取内容)或者readline()每次读取一行等操作重复读,避免这种情况

    同时读写操作(不推荐爱使用)

    • r+t: 可读、可写
    • w+t: 可写、可读
    • a+t: 可追加、可读

    文件指针

    首先硬盘上从来没有修改一说,硬盘上只有覆盖,即新内容覆盖新内容。

    1.seek(offset,whence): offset代表文件指针的偏移量,偏移量的单位是字节个数

    0相当于文件头开始;1相当于当前文件所在位置;2相当于文件末尾

    文件内容123456789

    with open("prize2.txt","r",encoding="GBK")as file:
        file.seek(4,0)
        print(file.read())
        file.seek(2,0)
        print(file.read())
        file.seek(0,2)
        print(file.read())
    

    56789
    3456789

    最后一次由于指针指到了最后,所以读取内容为空

    2.tell(): 每次统计都是从文件开头到当前指针所在位置

    with open("prize2.txt","r",encoding="GBK")as file:
        file.seek(4,0)
        print(file.read())
        print(file.tell())
    

    56789
    9

    3.truncate(n): truncate(n)是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。它的参照物永远是文件头。并且truncate()不加参数,相当于清空文件。

    源文件 :123456789

    with open("prize2.txt","a",encoding="GBK")as file:
        file.truncate(2)
    

    截取后:12

    注意的是,它是按照字节截取的,所以遇到多字节组成的字符需要注意,截取后乱码的问题

    调用系统功能操作文件

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

    import os
    with open("prize2.txt","r",encoding="GBK")as file1,
        open("prize4.txt","a",encoding="GBK") as file2:
            for line in file1:
                line=line.replace("1","2")
                file2.write(line)
    os.remove('prize2.txt')
    os.rename('prize4.txt', 'prize2.txt')
    print('done...')
    

    总而言之,修改文件内容的思路为:以读的方式打开原文件,以写的方式打开一个新的文件,把原文件的内容进行修改,然后写入新文件,之后利用os模块的方法,把原文件删除,重命名新文件为原文件名,达到以假乱真的目的。

    参考博客

    https://www.liaoxuefeng.com/wiki/1016959663602400/1017607179232640

  • 相关阅读:
    5+ App开发Native.js入门指南
    uni-app vue-cli命令行
    本地uni-app原生插件提交云端打包
    编写package.json文件
    生成插件包
    无障碍角色 accessibilityRole (iOS, Android)
    ajax 整理
    Javascript分享笔记
    echarts 横坐标分行展示,以及文字显示顶部
    js总结(11)js作用域
  • 原文地址:https://www.cnblogs.com/zx125/p/11323997.html
Copyright © 2011-2022 走看看