# r 、w 、 a / rb 、wb、ab/r+ w+ a+ # x = open("boom.txt", mode="w", encoding="utf-8") # y = x.write("你是大sb") # x = open("boom.txt", mode="r", encoding="utf-8") # print(x.read()) # x = open("boom.txt", mode="a", encoding="utf-8") # y = x.write("你是小sha") # print(y) # rb:表示只读字节,将文字信息已字节的形式展示出来 # x = open("boom.txt", mode="rb") b其实表示的是bytes # print(x.read()) # b'\xe4\xbd\xa0\xe6\x98\xaf\xe5\xa4\xa7sb\xe4\xbd\xa0\xe6\x98\xaf\xe5\xb0\x8fsha' # x = open("../python D6 字典/作业.py", mode="r", encoding="utf-8") # print(x.read()) # ../ 表示上层目录 /直接打开文件所在目录 # x = open("boom sha ka la ka", mode="w", encoding="utf-8") # print(x.write("周杰车轮")) # print(x.write("haoshabi")) # r+ 深坑请注意: 在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显⽰的是多少. 再写入或者操作⽂件的时候都是在结尾进⾏的操作. # x = open("boom sha ka la ka", mode="r+", encoding="utf-8") # x.read(3) # x.write("张国荣吗") # 先读后写、读完光标定位在最后一位在开始写 # w+ # x = open("boom sha ka la ka", mode="w+", encoding="utf-8") # x.write("大sb不是吗") # print(x.read()) # 读到内容为空w模式下会先清空原来文本,在写入光标定位在最后一位,因此打出内容为空 # x = open("boom sha ka la ka", mode="a+", encoding="utf-8") # x.write("大sb不是吗") # print(x.read()) # 追加在末尾 不管先读还是后读都读不出任何内容 # x = open("boom sha ka la ka", mode="a+", encoding="utf-8") # print(x.read()) # x.write("大sb不是吗") # seek(n):表示光标移动到n的位置 注意, 移动的单位是byte. 所以如果是UTF-8的中⽂部分要是3的倍数. # seek(参数1, 参数2) # 参数1表示的是偏移量,移动多少个单位 # 参数2表示从什么位置进行偏移 # seek(0):表示开头位置 # seek(0, 2):表示结尾位置 # f = open("boom.txt", mode="r", encoding="utf-8") # f.seek(5, 0) # y = f.read() # print(y) # tell():可以帮我们获取我们光标当前的位置 所指出的位置是以字节(byte)计算的 # f = open("boom.txt", mode="r+", encoding="utf-8") # f.read() # 读写模式 读完光标停在最后 # f.seek(0) # 光标移动到开头 # f.write("张国荣") # 开头写入张国荣共计9个字节 # print(f.tell()) # 9 # truncate() 截断⽂件 :删除光标后面所有文件 # f = open("boom.txt", mode="r+", encoding="utf-8") # 张国荣大傻子Ma # f.seek(9, 0) # f.truncate() # 文件只剩下:张国荣 # 所以如果想做截断操作. 记住了. 要先挪动光标. 挪动到你想要截断的位置. 然后再进⾏截断 # 关于truncate(n), 如果给出了n. 则从开头开头进⾏截断, 如果不给n, 则从当前位置截断. 后⾯ # 的内容将会被删除 # 修改文件以及另一种方式打开文件 # 修改文件:其实是用一个新文件去替换原文件 # 方法一: # 缺点需要将文件全部读出在重新写入新文件中,内存溢出 解决⽅案: ⼀⾏⼀⾏的读取和操作 # import os # # with open("boom sha ka la ka", mode="r", encoding="utf-8") as x1,\ # open("boom_new", mode="w", encoding="utf-8") as x2: # content = x1.read() # 一次读出内容导致内存溢出 # content_new = content.replace("sb", "傻子") # x2.write(content_new ) # 到这一步是生成一个文件,并将想要替换的内容替换好写入文件x2中 # os.remove("boom sha ka la ka") # 引用函数os 删除"boom sha ka la ka"原文件夹 # os.rename("boom_new", "boom sha ka la ka") # 引用函数os 将"boom_new"名称改为"boom sha ka la ka" # 方法二: # 一行一行读出,省内存 # import os # # with open("boom sha ka la ka", mode="r", encoding="utf-8") as x1,\ # open("boom_new", mode="w", encoding="utf-8") as x2: # for line in x1: # 文件也是可以迭代的 一行行拿出来替换写入新文件中,节省内存 # content_new = line.replace("sb", "沙比") # x2.write(content_new) # os.remove("boom sha ka la ka") # 引用函数os 删除"boom sha ka la ka"原文件夹 # os.rename("boom_new", "boom sha ka la ka") # 引用函数os 将"boom_new"名称改为"boom sha ka la ka"