1. 文件操作
ps: 带b类型的用于非文字文件的传输等操作
不带b的通常用r+,包含了读写,追加的功能
1. 只读 r
1 # 绝对路径 2 a = open('d:\czt.txt',mode = 'r',encoding = 'utf-8') 3 content = a.read() 4 print(content) #唐雨轩是大臭屁 5 a.close() 6 7 # 读 8 # 1.r 相当于把bytes类型转化为str类型 9 b = open('0801.txt',mode = 'r',encoding = 'utf-8') 10 content1 = b.read() 11 print(content1,type(content)) #唐雨轩是无敌大臭屁 <class 'str'> 12 b.close() 13 14 # 2.rb bytes类型的只读 可用于非文字的文件操作 15 c = open('0801.txt',mode = 'rb') #这里就不需要编码方式 16 content2 = c.read() 17 print(content2) #bytes类型的输出 18 c.close()
2. 只写 w
1 # 写 2 # 对于w:没有此文件就会创建文件 3 a = open('0802.txt',mode = 'w',encoding = 'utf-8') 4 a.write('武汉加油') 5 a.close() 6 7 # 1.w 先将源文件的内容全部清除,在写。 8 b = open('0802.txt',mode = 'w',encoding = 'utf-8') 9 b.write('希望疫情早日过去') 10 b.close() 11 12 # 2.wb 以bytes类型输入 13 c = open('0802.txt',mode = 'wb') 14 c.write('希望疫情早日过去'.encode('utf-8')) #将bytes类型转化为str类型 15 c.close()
3. 追加 a
1 # 追加 2 # 在源文件的基础上进行修改 3 # 1. a 4 a = open('0802.txt',mode='a',encoding='utf-8') 5 a.write('加油') 6 a.close() 7 8 # 2. ab 以bytes类型进行追加 9 b = open('0802.txt',mode='ab') 10 b.write('加油'.encode('utf-8')) 11 b.close()
4. 读写 r+
1 # 读写 先读再写,只能进行一次操作 2 # 1. r+ 3 # 源文件:希望疫情早日过去 4 a = open('0802.txt',mode = 'r+',encoding = 'utf-8') 5 print(a.read()) #希望疫情早日过去 6 a.write('加油') #文件变成:希望疫情早日过去 加油 7 print(a.read()) #此时不能再读出来,因为只能进行读写我一次操作 8 a.close() 9 10 # 若先写后读,则初始光标在前面,会把前几位覆盖,读出未被覆盖的内容 11 # 若全占完则什么都不打印 12 b = open('0802.txt',mode = 'r+',encoding = 'utf-8') 13 b.write('加油') #文件变为:加油疫情早日过去 14 print(b.read()) #疫情早日过去 打印未被覆盖的部分 15 b.close() 16 17 # 2. r+b bytes类型的读写 18 c = open('0802.txt',mode = 'r+b') 19 print(c.read()) #b'\xe5\xb8\x8c\xe6\x9c\x9b\xe7\x96\xab\xe6\x83\x85\xe6\x97\xa9\xe6\x97\xa5\xe8\xbf\x87\xe5\x8e\xbb\n' 20 c.write('加油'.encode('utf-8')) #文件变成:希望疫情早日过去 加油 21 c.close()
5. 写读 w+
1 # 写读 先写再读,只能进行一次操作 2 # 与w类似,先全部清除在写入 3 # 1. w+ 4 a = open('0802.txt',mode = 'w+',encoding = 'utf-8') 5 a.write('aaa') #文件变为:aaa 6 print(a.read()) #什么都不会读出 7 a.close() 8 9 # 改进方法 10 b = open('0802.txt',mode = 'w+',encoding = 'utf-8') 11 b.write('bbb') #文件变为:bbb 12 b.seek(0) #移动光标至文档首 13 print(b.read()) #bbb 14 b.close() 15 16 # 2. w+b bytes类型的写读 17 c = open('0802.txt',mode = 'w+b') 18 c.write('ccc'.encode('utf-8')) #文件变为:ccc 19 print(c.read()) #b'' 20 c.close()
6. 追加读 a+ 类似于写读
1 # 1. a+ 2 # 类似于写读 3 # 源文件: ccc 4 a = open('0802.txt',mode = 'a+',encoding = 'utf-8') 5 a.write('aaa') #文件变为:cccaaa 6 a.seek(0) #移动光标到文档首,否则无法读出 7 print(a.read()) #cccaaa 8 a.close() 9 10 # 2. a+b bytes类型的
7. 功能详解
1 # utf-8编码 2 # 一个中文字符,三个字节;一个英文字符,一个字节 3 # 源文件:野狗爱吃香蕉 4 a = open('0802.txt',mode = 'r+',encoding = 'utf-8') 5 print(a.read(3)) #野狗爱 6 a.seek(3) #移动光标 7 print(a.tell()) #告诉你光标的位置 3 8 print(a.read()) #狗爱吃香蕉 9 a.close() 10 # ps: a.read(3) 读出来按照字符 11 # a.seek(3) 定光标按照字节 12 13 # 可通过调节光标位置来选择读什么内容 14 # 源文件:野狗爱吃香蕉 15 b = open('0802.txt',mode = 'w+',encoding = 'utf-8') 16 b.write('野狗爱吃香蕉') 17 count = b.tell() 18 b.seek(count - 9) #定光标到9个字节前,中文对应3个字符 19 print(b.read()) #吃香蕉 20 b.close() 21 # 实现了打印最后三个字 22 23 # 其它功能介绍 24 # 源文件:野狗爱吃香蕉 25 # 吃香蕉 26 c = open('0802.txt',mode = 'r+',encoding = 'utf-8') 27 print(c.readable()) #True 是否可读,还有writeable等 28 print(c.readline()) #野狗爱吃香蕉 一行一行地读 29 print(c.readlines()) #['吃香蕉\n'] 每一行当成列表中的一个元素,添加到list中 30 c.truncate(3) #文件变为野 截取,截取前几个字节 31 c.close()
1 # with as 打开文件 不需要close(),并且可以同时打开多个文件 2 # 源文件:野狗爱吃香蕉 3 with open('0802.txt',mode = 'r+',encoding = 'utf-8') as a,\ 4 open('0802.txt',mode = 'a+',encoding = 'utf-8') as b: 5 print(a.read()) #野狗爱吃香蕉 6 print(b.read()) #啥都没