原义字符串:r'以字符作为输出单位,所有在普通字符串中能被转义的符号在这都原样输出'
print(u'a b
c')
print(r'a b
c')
f = open('source.txt', 'r', encoding='utf-8')
f.read() 将所 有内容一次性读完
f.read(10) 指定字符数来进行读取
f.readline() 一次读取一行(当读取到换行标识时,就结束本次读取)
f.readlines() 将所有内容读存,按换行标识作为读取一次的依据,存放为列表
f.close()
# part2 with open('target.txt', 'r', encoding='utf-8') as rf1, open('target1.txt', 'r', encoding='utf-8') as rf2: print(rf1.read()) print(rf2.read()) # print(rf1.read()) # 报错 # print(rf2.read()) # 报错
这种情况是属于同时读取两个文件,当结束with缩进后在对两个文件的读取内容进行打印是不被允许,系统会报错。
# part3 with open('target.txt', 'r', encoding='utf-8') as rf1: with open('target1.txt', 'r', encoding='utf-8') as rf2: print(rf1.read()) print(rf2.read()) # print(rf1.read()) # 可以操作 # print(rf2.read()) # 不可以操作
这个实例与上一种不同,两种文件属于嵌套关系,所执行出的结果也有不同的地方,
当打印第一个文件的读取内容进行打印时候属于还在第一个第一个文件的读取的缩进内的,所以
可以进行打印,而对第二个文件的读取内容进行打印的话,是属于在第二个with缩进已经结束
执行的所以不可以打印。
下面试主从模式不同组合时候,不同的操作模式,但大前提不变都是主模式起主导:
rt: 文件必须提前存在,不存在报错,文件操作采用字符形式 - 简写为 r
wt: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字符形式 - 简写为 w
at: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字符形式 - 简写为 a
rb: 文件必须提前存在,不存在报错,文件操作采用字节形式
wb: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字节形式
ab: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字节形式
r+t:文件必须存在的可读可写,默认从头开始替换写,按字符操作
w+t:文件存在清空不存在创建的可读可写,按字符操作
a+t:文件存在追加不存在创建的可读可写,按字符操作
r+b:文件必须存在的可读可写,默认从头开始替换写,按字节操作
w+b:文件存在清空不存在创建的可读可写,按字节操作
a+b:文件存在追加不存在创建的可读可写,按字节操作
t模式下:原文件采用什么编码,你就选取什么编码操作,如果不选取,默认跟操作系统保持一致
-- t模式下一定要指定编码
b模式下:硬盘的数据就是二进制,且能根据内容识别出编码,写入时的数据也是通过某种编码提前处理好的,所有在操作时,没有必要再去规定编码
# 文本文件的复制:可以t也可以b 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)
# 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')) # 人