三种字符串: ```PYTHON 普通字符串:u"以字符作为输出单位"print(u"abc") 二进制:b"二进制字符串以字节为单位输出"print(b"abc") 原义字符串r"以字符为单位输出,能被转义的字符原样输出"print(r"a b ") ``` 文件操作三步骤: ```python 1:打开文件:硬盘空间被操作系统持有,文件对象被应用程序持有 f_o=open("当前地址下具体文件名","操作方式",encoding="utf-8") 2:操作文件:data=f.read() 3:释放文件:释放操作系统对硬盘空间的持有f.close ``` 基础读、写: ```python fr=open("source.txt","r",encoding="utf-8") fr.read():将所有内容一次性读完 fr.read(10):指定读的字符数 fr.readline():一次读一行:文件换行符就是结束本次读取的依据,存为字符串类型 fr.readlines():将所有内容读存,按换行标识作为读取一次的依据,存为列表。存为列表。存为列表。 fr.close fw=open("target.txt","w",encoding="utf-8") fw.write("123 "):一次写一行,行必须用 标识 fw.writelines(["abc ","def ","xyz "]):一次写多行,必须用 进行标识 fw.flush():向操作系统发送一条将内存中数据刷新到硬盘指令 fw.close():将内存中写的数据刷新到硬盘 然后 释放硬盘空间 ``` with...open 语法 ```PYTHON withopen语句整合了文件资源打开与释放 在with的缩进内可以操作文件对象,一旦取消缩进,资源就被释放了。 语法结构: withopen("target.txt","r",encoding="utf-8")as fr, ``` 文件的操作模式: ```python 主模式:r、w、a、x:主模式只能选取一个,规定主要操作模式 从模式:t、b、+:从模式也必须出现,但个数不一定唯一,为主 模式添加功能。t、b两种只能有一个。从模式的组合只能是 t+或者b+。 r:读,必须有文件才行 w:写,有的话就清空,没有的话添加 a:追加写,有的话就追加写,没有的话就新建 x:创建写,必须没有文件才行!有的话报错! 从: t:默认,按字符操作 b:按字节操作 +:可读可写操作 主从模式组合: rt: 文件必须提前存在,不存在报错,文件操作采用字符形式 - 简写为 r wt: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字符形式 - 简写为 w at: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字符形式 - 简写为 a rb: 文件必须提前存在,不存在报错,文件操作采用字节形式 wb: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字节形式 ab: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字节形式 r+t:文件必须存在、可读可写,默认从头开始替换写,按字符操作 w+t:文件存在清空不存在创建的可读可写,按字符操作 a+t:文件存在追加不存在创建的可读可写,按字符操作 r+b:文件必须存在的可读可写,默认从头开始替换写,按字节操作 w+b:文件存在清空不存在创建的可读可写,按字节操作 a+b:文件存在追加不存在创建的可读可写,按字节操作 ``` 文件操作编码问题: ```PYTHON t模式下,原文采用什么编码,就选用什么编码,如果不选取,就跟操作系统一致。 b模式下,硬盘数据就是二进制文件,读出、写入都是二进制,不需要编码,没有必要再规定编码。 ``` 文件复制: ```python with open('target.txt', 'r', encoding='utf-8') as rf: with open('target2.txt', 'w', encoding='utf-8') as wf: for line in rf: wf.write(line) with open('target.txt', 'rb') as rf: with open('target3.txt', 'wb') as wf: for line in rf: wf.write(line) 非文本文件只能采用b模式操作,不需要指定编码 - 因为根本不涉及编码解码过程 with open('001.mp4', 'rb') as rf: with open('002.mp4', 'wb') as wf: for line in rf: wf.write(line) ``` 游标操作: ```python 1.游标操作的只能是字节,所以只能在b模式下进行操作 2.游标操作可以改变操作位置,r模式下可以改变位置进行操作 3.seek(offset,whence) offset:为整数,就是往后偏移多少个字节,负数往前偏移 whence:0:代表游标在开头。1:游标在当前位置 2:游标在末尾。 案例:你是日本人 with open('target.txt', 'rb') as f: # 先读6个字节 data = f.read(6) print(data.decode('utf-8')) # 你是 # 将游标从头开始往后偏移3个字节 f.seek(3, 0) data = f.read(6) print(data.decode('utf-8')) # 是日 # 从当前游标位置往前偏移3个字节 f.seek(-3, 1) data = f.read(3) print(data.decode('utf-8')) # 日 f.seek(-3, 2) data = f.read(3) print(data.decode('utf-8')) # 人 ```