zoukankan      html  css  js  c++  java
  • 文件内指针移动、文件修改和函数

      文件内指针移动、文件修改和函数。

      一、文件内指针移动

        大前提:文件内指针的移动是Bytes为单位的,唯独t模式下的read读取内容个数是以字符为单位

        例:

          with open('a.txt',mode='r',encoding='utf-8') as f:

            data=f.read(3)  #在utf-8中,三个字节代表一个数字,一个字节代表英文字母

            print(data)

          

          with open('a.txt',mode='rb') as f:

            data = f.read(3)

            print(data.decode(utf-8))

        f.seek(指针移动的字节数,模式控制):控制文件指针的移动

        模式控制:

        0:默认的模式,该模式代表指针移动的字节数是以文件开头为参照的

        1:该模式代表指针移动的字节数是以当前所在的位置为参照的

        2:该模式代表指针移动的字节数是以文件末尾的位置为参照的

        强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用

        f.tell()查看文件指针当前距离文件开头的位置

        0模式详解

        with open('a.txt',mode='rt',encoding='utf-8') as f:

          f.seek(4,0)

          print(f.tell())

          print(f.read())

        with open('a.txt',mode = 'rb') as f:

          f.seek(2,0)

          print(f.tell())

          print(f.read().decode('utf-8'))

        1模式详解

        with open('a.txt',mode='rb') as f:

          f.seek(3,1)

          print(f.tell())

          f.seek(4,1)

          print(f.tell())

          print(f.read().decode('utf-8'))

        2模式详解

        with open('a.txt',mode='rb') as f:

          f.seek(-9,2)

          data=f.read()

          print(data.decode('utf-8'))

      二、文件修改

        须知一:

        硬盘空间无法修改,硬盘中的数据更新都是用新的内容覆盖旧的内容

        内容控制可以修改

        with open('a.txt','r+t',encoding='utf-8') as f:

          f.seek(4,0)

          print(f.tell())

          f.write('我擦勒')

        须知二:

        文件对应的是硬盘空间,硬盘不能修改所以文件本质也不能修改,

        我们看到文件的内容可以修改,是如何实现的呢?

        大的思路:将硬盘中文件内容读入内存,然后在内存中修改完毕后再覆盖写回原文件

        具体的实现方式分为两种:

        1.将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件

        优点:在文件修改过程中同一份数据只有一份

        缺点:会过多地占用内存

        with open('db.txt',mode='rt',encoding='utf-8') as f:

          data = f.read()

        

        with open('db.txt',mode='wt',encoding = 'utf-8') as f:

          f.write(data.replace('kevin','SB'))

        2.以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,删掉原文件,将临时文件重命名原文件名

        优点:不会占用过多的内存

        缺点:在文件修改过程中同一份数据存了两份

        import os

        with open('db.txt',mode='rt',encoding='utf-8') as read_f,

            open('.db.txt.swap',mode = 'wt',encoding = 'utf-8') as wrife_f:

          for line in read_f:

            wrife_f.write(line.replace('SB','kevin'))

        os.remove('db.txt')

        os.rename('.db.txt.swap','db.txt')

      三、函数

       (1) 什么是函数

          具备某一功能的工具->函数

          事先准备工具的过程---->函数的定义

          遇到应用场景,拿来就用----->函数的调用

          

          函数分类两大类:

            1、内置函数

            2、自定义函数

        (2)为何要用函数

            1、代码冗余

            2、可读性差

            3、可扩展性差

        (3)如何用函数

            原则:必须先定义,再调用

            定义函数的语法:

              def 函数名(参数1,参数2,......)

                """文档注释"""

                code1

                code2

                code3

                .....

                return 返回值

            调用函数的语法:

                函数名(值1,值2)      

      

        

            

  • 相关阅读:
    jQuery中ajax的4种常用请求方式
    前端常见浏览器兼容性问题解决方案
    平衡二叉树---将有序数组转换为二叉搜索树
    equals
    Java中的System.out.println
    System.arraycopy --全面解释(就是那么有爱心)
    计算机网络实验-ACL-OSPF-RIP
    pip install lxml
    Spark-shell --常用命令 (command)
    《Thinking in Java》---Summary of Chapter 2
  • 原文地址:https://www.cnblogs.com/xiaocaiyang/p/9688351.html
Copyright © 2011-2022 走看看