Day08 文件操作:读,写,追加,读写,写读

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())    #啥都没

 

上一篇:9-day08_HTML&CSS


下一篇:day08_String类、static关键字、Arrays类、 Math类