目录
0 昨日回顾
字符编码
字符编码:在文件中存/取/python3解释器解释的时候,字符会发生一种变换,例如a->>00001111
存:从内存到硬盘
取:从硬盘到内存
python3解释器解释:在python3解释器解释的时候,会新开辟一块内存空间放入变量,python3回把“name = ‘nick’ ”以unicode的形式生成一个变量,print(name)
1 基本的文件处理
1.1 文件是什么?
文件是操作系统提供的虚拟单位,有了文件我们可以读取数据,没有文件的话应该去硬盘上扣动机械手臂去寻找数据
1.2 如何使用文件
- 打开文件
- 读写数据
- 保存
- 关闭文件
1.3 读取 关闭
- 读取文件fr.read() fr.readline()
- del f 或删除文件名f,但文件还处于开启状态
- 关闭文件 f.close() 不仅关闭了文件,且关闭了文件
- 打开文件的那一瞬间是在操作硬盘和内存
- python3能操控硬盘和内存吗?一定不能,因为他是应用程序
- 你看到的python3打开文件并操控。都是基于操作系统的
- 但是你只是使用了del f,只是在删除f这个变量名的内存占用
- 但是我们从来都没有告诉操作系统关闭文件
- 所以我们必须使用f.close(0关闭文件)
1.4 写
- fw.write() 清空文件后写入内容
- fw.flush() 快速刷入硬盘
2 绝对路径与相对路径
2.1 绝对路径
- 绝对:完全不一样
- 绝对路径:从根目录一直到你需要的文件路径
fr = open(r'F:\python从入门到放弃\D9.md',mode ='r',encoding='utf-8' )
date = fr.read()
print(date)
fr.close()
2.2 相对路径
-
相对:还有点一样的
-
相对路径:从当前文件夹开始,到你需要的文件路径
3 文件打开的三种方式
3.1 mode = 'r' ,只读
fr = open(r'F:\python从入门到放弃\D9.md',mode ='r',encoding='utf-8' ) #不加mode,默认为rt
date = fr.read()
print(date)
fr.close()
3.2 mode = 'w',只写,清空文件再写入
fw = open(r'C:\Users\Administrator\Desktop\text.txt',mode ='w',encoding='utf-8' )
date = fw.write('lucky \n good good study \n day day up')
print(date)
fw.close()
3.3 mode = 'a',追加,在后面追加写入文件
fw = open(r'C:\Users\Administrator\Desktop\text.txt',mode ='a',encoding='utf-8' )
date = fw.write('lucky \n good good study \n day day up')
print(date)
fw.close()
3.4 mode = 'rt',打开的text文本类型
fr = open(r'C:\Users\Administrator\Desktop\text.txt',mode ='rt',encoding='utf-8' )
date = fr.read()
print(date)
fr.close()
3.5 mode = 'rb',打开的bytes类型,二进制
fr = open(r'C:\Users\Administrator\Desktop\text.txt',mode ='rb')
date = fr.read()
print(date)
fr.close()
补充:
- \t \n都有特殊意义,可以再加一个反斜杠\来取消特殊意义,也可以在前面加个r
- b表示,你写的字符串为二进制,在打印的时候不需要使用终端的编码进行处理,直接打印原生的二进制
- r 告诉接下来的字符串,里面所有的特殊字符都变得无意义,直接原生输出
- t和b 不能单独使用,必须得和r/w/a一起使用
- r/w/a能单独使用
4 with管理上下文
with open(r'C:\Users\Administrator\Desktop\text.txt','r',encoding='UTF-8') as fr:
date = fr.read()
print(date)
5 文件的高级应用
-
r只读/w/只写/a追加,可读可写(不推荐)r+ w+ a+
-
其实这一段看视频的时候没怎么记,因为刚开始脑子懵懵的,迷迷糊糊的听完了,稀里糊涂的,但又往后继续看大概了解了一下
-
其实这一块的东西都不太重要,一个是r+,w+,a+等,即一个with open 即能可读可写,但好像说容易搞混,一般不用一般即需要读又需要写时别嫌麻烦,用两个with open,
-
其次就是直至,f.seek(),来寻找指针的位置,并对该位置的字符进行修改,但其实是替换,还很离谱,按相同的字节数替换的,如一个字母是一个字节,一个文字是六个字节,那么修改两个文字要替换掉六个字母,也不重要,水导说的
-
当然,这一块肯定还有问题,不管了大概就这些,有一些基础的知识遇到了就问kimi
6 文件的拷贝
from math import atan2
with open('text.txt','r',encoding='UTF-8') as fr:
data = fr.read()
print(data,type(data))
data = data.replace('sb','帅比')
print(data)
# with open('text_swap.txt','w',encoding='UTF-8') as fw:
# fw.write(data)
#
# import os
# os.remove('text.txt')
# os.rename('text_swap.txt','text.txt')
'''
qq 想修改这个程序,微信也想修改这个程序
qq想修改‘ tank dsb' 中s改为a,微信想把’s'修改成‘b’,这两个修改一定有先后顺序,那么s已经变成了a,
但是微信找的到‘s'吗?找不到了,就报错了
qq想修改‘ tank dsb' 中s改为a,微信想把’s'修改成‘b’,所以我给qq一份拷贝文件,我给微信一份拷贝文件,
然后让他们各自修改,修改成功后,删除原文件,修改替换后的文件名为原文件
'''
# with open('text.txt', 'r', encoding='utf-8') as fr:
# # print(fr.readlines()) # 按行打印
# # for i in fr.readlines(): #迭代器 相当于拿了一筐鸡蛋
# # print(i)
# print('*'*100)
# for i in fr: #生成器 相当于拿了一只老母鸡
# print(i)
总结:
1.with open(filename,mode,encoding) as file:
file+操作
2.r/w/a/ t/b rt/rb/wt/at
3.文件的复制
标签:文件,fr,text,Day,date,mode,print,打开方式 From: https://www.cnblogs.com/chsun12/p/18492462