小数据池与文件的操作
一,小数据池和深浅拷贝
-
小数据池
- 小数据池:⼀种数据缓存机制. 也被称为驻留机制. 各⼤编程语⾔中都有类似的东⻄.用于提高效率.
- 支持的数据类型:str,int,bool
- id() -- 查看元素的内存地址
- is 和 ==
- is 判断两个元素的内存地址是否相同
- == 判断两个元素的值是否相同
- 小数据池规则:
- 数字:-5~256
- 字符串:
- 字符串在做乘法(乘数不为1)的时候总长度不能超过20
- 自己定义的字符串长度不限制,字符串必须是由字母,数字,下划线组成
- 特殊字符(中文除外)定义1个的时候,进行驻留
- 代码块:一个文件,一个模块,一个函数,一个类,终端中每一行都是一个代码块
- 数字:全部驻留
- 字符串:
- 自己定义的字符串全部驻留
- 字符串做乘法(乘数不为1)的时候总长度不能超过20
- python3.7以上版本乘法的时候总长度不能超过4096
-
深浅拷贝
-
赋值 =
赋值没有创建新的空间,多个变量指向同一个内存地址.
-
浅拷贝
- l2 = l1[:] 和 l2 = l1.copy()
- 只拷贝第一层元素
- 会创建一个新的容器,容器中的元素和原容器的元素指向同一个内存地址
-
深拷贝
-
import copy
l2 = copy.deepcopy(l1)
-
不可变的数据类型和原数据指向同一空间
-
可变数据类型会创建一个新的空间
-
-
二,文件操作
-
语法
# 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() # 更改文件名.(旧名,新名)
-
模式
-
读
# 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
-
-
其他操作
- 绝对路径 -- 从磁盘的根处查找
- 相对路径 -- 相对于当前文件进行查找
- tell() -- 查看光标位置,单位是字节
- seek(偏移量,起始位置) -- 起始位置默认0--开头,1--当前位置,2--末尾