11--文件操作之文本文件
总结小视频参见,欢迎来踩踩( •̀ ω •́ )y-----https://www.bilibili.com/video/av96067116
一、文件
1、什么是文件
文件是操作系统提供给用户/应用程序操作硬盘的一种功能/概念/接口
2、为什么要用文件
用户/应用程序可以通过文件将数据永久保存到硬盘中,即操作文件就是操作硬盘
用户/应用程序直接操作的是文件,对文件进行的所有操作都是在向操作系统发送系统调用,然后由操作系统将其转换成具体的硬盘操作。
二、如何对文件进行操作---t模式,即只针对文本文件的操作
1、文件操作的基本流程
1/1 打开文件,open()
#注意:打开文件时的文件路径问题
# open('C:\a\ab\') \在python中具有特殊意义 # 可以采取两种方式解决 # rawstring,原生字符串 open(r'C:\a\ab\') # 右斜杠变左斜杠 f = open('1.txt') # f是一个变量名,对应的值占用的是应用程序的内存空间 print(f)
1/2 操作文件(读/写)
# 应用程序对文件的读写请求都是在向操作系统发送系统调用,然后由操作系统控制硬盘把文件读入内存或者写入硬盘 f = open('1.txt',mode='rt') res = f.read() print(res)
1/3 关闭文件(close())
# 关闭文件,先关文件,后删除内存空间,如果先删除内存空间,关闭文件时会报错哦 # f.close 回收占用操作系统的空间 # 变量f存在,但是不能执行读文件的操作 # def f 回收内存空间,垃圾回收机制。。。不需要考虑
2、with--上下文管理
# 文件对象又称为文件句柄: # with 在子代码块执行结束后会自动调用f.close with open('1.txt',mode = 'rt') as f: res = f.read() print(res) # 可以同时打开几个文件,\可以换行 with open('1.txt',mode = 'rt') as f,\ open('2.txt',mode = 'rt') as f1: res = f.read() res1= f1.read() print(res) print(res1)
3、指定字符编码
# t文本模式---你需要知道的知识 # 默认都是以字符串就是以(Unicode编码)为单位 # 文本文件,不是图片和视频文件。。。。 # 必须为Open指定参数
# open()默认以操作系统的编码格式打开文件,Linux,mac--utf-8,Windows--gbk with open('1.txt',mode='rt',encoding='utf-8') as f: res = f.read() # 默认读出来的1.txt就是utf-8,但是t模式会将读出的结果解码成Unicode, print(res) print(type(res)) f.write('我要吃饭') # 如果没有t模式,在存文本文件的时候需要自己编码,读的时候需要自己解码 # 硬盘: 1.txt在硬盘上是utf-8的二进制格式,因为1.txt以utf-8编码格式存的 # 内存:读到内存就是 1.txt在硬盘上是utf-8的二进制格式--解码--由于t模式存在,字符串必须转为Unicode
4、文件操作模式详解
1. r,默认的操作模式,只读模式
# r只读模式: 在文件不存在时则报错,文件存在文件内指针直接跳到文件开头 with open('a.txt',mode='r',encoding='utf-8') as f: res=f.read() # 会将文件的内容由硬盘全部读入内存,赋值给res
with open('1.txt',mode = 'rt',encoding='utf-8') as f:
# read不指定参数,指针直接跳到最后,整个文件都从硬盘读到读到内存
print('第一次读'.center(50,'#'))
res = f.read()
print(res)
# 此时光标在文件最后所以继续读是没有值的,read从指针当前位置开始读
print('第2次读'.center(50, '#'))
res = f.read()
print(res)
# 小练习:实现用户认证功能 inp_name=input('请输入你的名字: ').strip() inp_pwd=input('请输入你的密码: ').strip() with open(r'db.txt',mode='r',encoding='utf-8') as f: for line in f: # 把用户输入的名字与密码与读出内容做比对 u,p=line.strip('\n').split(':') if inp_name == u and inp_pwd == p: print('登录成功') break else: print('账号名或者密码错误')
2. w只写模式,只能写不能读,比如可以进行文件复制操作
# w只写模式: 在文件不存在时会创建空文档,文件存在会清空文件,文件指针跑到文件开头 with open('b.txt',mode='w',encoding='utf-8') as f: f.write('你好\n') f.write('我好\n') f.write('大家好\n') f.write('111\n222\n333\n') #强调: # 1 在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面 # 2 如果重新以w模式打开文件,则会清空文件内容
# 只能写不能读
with open('4.txt',mode='wt',encoding='utf-8') as f: f.write('haha\n') # f.read() 报错不可读 f.write('哈哈')
# 案列,w模式用来创建全新的文件 # 文本文件的copy src = input('源文件路径:') tsg = input('复制文件路径:') with open(r'{}'.format(src),mode='rt',encoding='utf-8') as f,\ open('{}'.format('tsg'),mode='wt',encoding='utf-8') as f1: res = f.read() f1.write(res)
3、a 只追加模式,在文件不存在时,会创建一个新的文件,指针在最开始;文件存在时,指针会直接跳到文件末尾,比如注册功能和写日志
with open('5.txt',mode='at',encoding='utf-8') as f: # f.read() 不能读,报错 f.write('tank')
# 小练习:实现注册功能: name=input('username>>>: ').strip() pwd=input('password>>>: ').strip() with open('db1.txt',mode='a',encoding='utf-8') as f: info='%s:%s\n' %(name,pwd) f.write(info)
强调:w模式和a模式的异同 # 1 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后 # 2 不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后
5. + 模式的了解
# r+ w+ a+ :可读可写 #在平时工作中,我们只单纯使用r/w/a,要么只读,要么只写,一般不用可读可写的模式