zoukankan      html  css  js  c++  java
  • 文件操作_26th,Nov 2018

    文件:操作系统问应用程序或用户提供一种操作硬盘的虚拟单位

      --文件时操作系统提供的虚拟单位

      --应用程序或用户对文件的读写操作都是向操作系统发送指令

      --文件包括文本文件和二进制文件

    为何要用文件:文件对应硬盘空间,如果需要永久保存数据,必须用到文件

    如何用文件:绝对路径:从根目录开始

          相对路径:相对于当前执行文件所在文件夹

    文件的操作:

      1.打开文件:f=open("绝对路径或相对路径", mode="读或写模式",encoding='utf-8')

            --该种打开方式必须配合close()函数使用

            with open("绝对路径或相对路径", mode="读或写模式",encoding='utf-8') as f:

            --该模式打开不需要close()函数

      文件的打开模式: 'r' 默认只读,如果文件不存在,报错

              'w' 覆盖写模式,文件不存在则创建

              'a' 追加写模式,文件不存在则创建

              'b' 二进制文件模式

              't' 文本文件模式,默认

              '+'  与r/w/a  同时使用,在原功能基础上同时增加读写功能

      2.文件内容的读取:

              f.read(): 读入全部内容

              f.readline() 读入一行内容

              f.readlines()读入全部内容,分行处理

      3.文件写入:(w - 覆盖写模式, a- 追加写模式)

            f.write(s)  向文件写入一个字符串或字节流

            f.writelines(lines) lines为一个列表

            f.seek(offset)  offset( 0- 文件开头, 1-当前位置, 2- 文件结尾)

      4.文件修改的两种方式:

       方式一:1. 以读的方式打开源文件

           2.将文件内容一次性全读入内存,在内存完成修改

           3.以写的方式打开源文件,然后将修改的结果一次写入源文件

       总结:优点是在文件修改过程中硬盘只存在一份数据、缺点是浪费内存

    例:

    with open('b.txt',mode='rt',encoding='utf-8') as read_f:
    
      mag=read_f.read()
    
      new_msg=mag.replace('a', 'b')
    
    with open('b.txt', mode='wt', encoding='utf-8') as write_f:
    
      write_f.write(new_mag)

       方式二:1.以读的方式打开源文件,以写的方式打开一个临时文件

           2.读取源文件的一行内容到内存中,将修改的结果写入临时文件,循环往复直到改完

          3.删除源文件,将临时文件名该为源文件名

       总结:优点:同一时间在内存中只有一行内容,更节省内存,缺点:文件修改过程中硬盘存两份数据 

    import os
    with open('b.txt', mode='rt', encoding='utf-8') as read_f,
       open('.b.txt.swap', mode='wt', encoding='utf-8') as write_f:
        for line in read_f:
            write_f.write(line.replact('a', 'b')
    
    os.remove('b.txt')
    os.rename('.b.txt.swap', 'b.txt')

       5. 指针 seek () 函数: 移动以字节为单位

        0(默认):参照文件开头(强调:只有0模式下既可以使用 t 模式,又可以使用 b 模式)

        1  : 参照指针当前所在位置(只能在b 模式下使用)

        2 : 参照文件末尾 (只能在 b 模式下使用)

             例: f.seek(-5,2)  将指针先移到末尾在向左移动5个字节

          强调: 只有在 t 模式下 read(n) 中的 n 代表字符个数,除此之外 都代表 n 个字节

           

            

  • 相关阅读:
    (转)基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理
    (转)基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
    (转)基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度
    心得体悟帖---200301(因为别人或者别的事情,影响自己的心情,实在是太傻b了)
    心得体悟帖---200301(尽量把课程弄短,那样不良状态也可以录课)
    范仁义js课程---34、break和continue
    尚硅谷js---44、break和continue
    javascript疑难问题---5、javascript代码执行时间的计算
    范仁义js课程---33、打印99乘法表
    范仁义js课程---32、for循环嵌套
  • 原文地址:https://www.cnblogs.com/Afrafre/p/10020184.html
Copyright © 2011-2022 走看看