Day 9 文件基本处理 + 相(绝)对路径 + 文件打开方式 + 文件拷贝

chsun12 / 2024-11-09 / 原文

目录
  • 0 昨日回顾
    • 字符编码
  • 1 基本的文件处理
    • 1.1 文件是什么?
    • 1.2 如何使用文件
    • 1.3 读取 关闭
    • 1.4 写
  • 2 绝对路径与相对路径
    • 2.1 绝对路径
    • 2.2 相对路径
  • 3 文件打开的三种方式
    • 3.1 mode = 'r' ,只读
    • 3.2 mode = 'w',只写,清空文件再写入
    • 3.3 mode = 'a',追加,在后面追加写入文件
    • 3.4 mode = 'rt',打开的text文本类型
    • 3.5 mode = 'rb',打开的bytes类型,二进制
  • 4 with管理上下文
  • 5 文件的高级应用
  • 6 文件的拷贝

0 昨日回顾

字符编码

字符编码:在文件中存/取/python3解释器解释的时候,字符会发生一种变换,例如a->>00001111

存:从内存到硬盘

取:从硬盘到内存

python3解释器解释:在python3解释器解释的时候,会新开辟一块内存空间放入变量,python3回把“name = ‘nick’ ”以unicode的形式生成一个变量,print(name)

1 基本的文件处理

1.1 文件是什么?

文件是操作系统提供的虚拟单位,有了文件我们可以读取数据,没有文件的话应该去硬盘上扣动机械手臂去寻找数据

1.2 如何使用文件

  1. 打开文件
  2. 读写数据
  3. 保存
  4. 关闭文件

1.3 读取 关闭

  • 读取文件fr.read() fr.readline()
  • del f 或删除文件名f,但文件还处于开启状态
  • 关闭文件 f.close() 不仅关闭了文件,且关闭了文件
  1. 打开文件的那一瞬间是在操作硬盘和内存
  2. python3能操控硬盘和内存吗?一定不能,因为他是应用程序
  3. 你看到的python3打开文件并操控。都是基于操作系统的
  4. 但是你只是使用了del f,只是在删除f这个变量名的内存占用
  5. 但是我们从来都没有告诉操作系统关闭文件
  6. 所以我们必须使用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.文件的复制