• 小数据池与文件的操作


    一,小数据池和深浅拷贝

    1. 小数据池

      1. 小数据池:⼀种数据缓存机制. 也被称为驻留机制. 各⼤编程语⾔中都有类似的东⻄.用于提高效率.
      2. 支持的数据类型:str,int,bool
      3. id() -- 查看元素的内存地址
      4. is 和 ==
        • is 判断两个元素的内存地址是否相同
        • == 判断两个元素的值是否相同
      5. 小数据池规则:
        • 数字:-5~256
        • 字符串:
          1. 字符串在做乘法(乘数不为1)的时候总长度不能超过20
          2. 自己定义的字符串长度不限制,字符串必须是由字母,数字,下划线组成
          3. 特殊字符(中文除外)定义1个的时候,进行驻留
      6. 代码块:一个文件,一个模块,一个函数,一个类,终端中每一行都是一个代码块
        • 数字:全部驻留
        • 字符串:
          1. 自己定义的字符串全部驻留
          2. 字符串做乘法(乘数不为1)的时候总长度不能超过20
          3. python3.7以上版本乘法的时候总长度不能超过4096
    2. 深浅拷贝

      1. 赋值 =

        赋值没有创建新的空间,多个变量指向同一个内存地址.

      2. 浅拷贝

        • l2 = l1[:] 和 l2 = l1.copy()
        • 只拷贝第一层元素
        • 会创建一个新的容器,容器中的元素和原容器的元素指向同一个内存地址
      3. 深拷贝

        • import copy

          l2 = copy.deepcopy(l1)

        • 不可变的数据类型和原数据指向同一空间

        • 可变数据类型会创建一个新的空间

    二,文件操作

    1. 语法

      # f = open("文件路径", mode="模式", encoding="编码")
      # open()   调用操作系统打开文件
      # mode     对文件的操作方式
      # encoding 文件的编码  --  存储编码要统一
      #           win -- 默认gbk
      #           linux,mac -- 默认utf-8
      # f        文件句柄 -- 操作文件的途径
      
      # 另一种打开文件的方式: 帮助自动关闭文件;可以同时开多个文件,用逗号隔开;也可以同时操作一个文件
      with open("a", mode="r", encoding="utf-8") as f,
           open("b", mode="w", encoding="utf-8") as f1: 
      
      import os
      print(os.getcwd()) # 查看当前工作路径
      os.remove() # 删除文件
      os.rename() # 更改文件名.(旧名,新名)
      
    2. 模式

      • # r
        f = open("a", mode="r", encoding="utf-8")
        contend = f.read()   # 全部读取
        print(contend)
        print(f.read(3))     # 字符读取
        print(f.readline())  # 读取一行,()内可以加入需要读取本行的几个字符
        print(f,randlines()) # 读取每一行,存储到列表中
        for line in f:       # 一行一行读取  -- 防止内存溢出
             print(line)
        
        # rb -- 读非文本文件,不能指定编码,
        f = open("a", mode="rb")
        print(f.read(3))     # 读取3个字节
        
        # r+ -- 读写 -- 先读后写
        f = open("a", mode="r+", encoding="utf-8")
        print(f.read())
        f.write("你好啊")
        f.flush()
        f.close()            # 关闭文件,释放内存
        
        # r+b
        
      • # w 清空写 -- 没有文件就创建,有就打开,先清空,再写入
        f = open("a", mode="w", encoding="utf-8")
        f.write("乳娃娃")  # 不能写入int
        f.flush()
        f.close()
        
        # wb
        # w+ -- 先清空,写入,再读.用不着
        # w+b
        
        # a 追加写 -- 文件末尾写入
        f = open("a", mode="a", encoding="utf-8")
        f.write("啊啊啊啊啊啊啊,好烦啊")
        f.flush()
        f.close()
        
        # ab
        # a+ -- 追加读,光标默认在末尾
        f = open("a", mode="a+", encoding="utf-8")
        print(f.read())
        f.write("真的废物")
        
        # a+b
        
    3. 其他操作

      • 绝对路径 -- 从磁盘的根处查找
      • 相对路径 -- 相对于当前文件进行查找
      • tell() -- 查看光标位置,单位是字节
      • seek(偏移量,起始位置) -- 起始位置默认0--开头,1--当前位置,2--末尾
  • 相关阅读:
    博客园开通新随笔
    遍历两个数组,并输出数组中的不同内容
    1021-二叉树复制和左右子树互换
    1020-层次遍历二叉树
    1019-计算二叉树的高度和结点数
    1018-深度遍历二叉树
    1017-乘积最大
    1016-求幂
    1015-最大公约数和最小公倍数
    1014-数据的插入与删除
  • 原文地址:https://www.cnblogs.com/zyyhxbs/p/11016243.html
Copyright © 2020-2023  润新知