疫情环境下的网络学习笔记 python 3.13
3.13
昨日回顾
集合内元素三个特征
- 必须为不可变类型
- 无序
- 不重复,只保留重复的一个元素
集合的用途
- 去重,有局限性:必须为不可变,无法保证去重对象顺序
- 关系运算
关系运算
- 交,并集,差,子集
如何让python2不乱码
-
前两个阶段:#coding:,冒号后面的编码格式与当初存文件时的编码一致
对字符串前的乱码问题,在字符串前加u,强制让python解释器用unicode存
-
python3,加文件头
编码解码
- encode,decode
- 一个字符,在内存中存成Unicode,print方法会把他对应成字符
Unicode:可以转成所有其他编码格式
-
x.encode('gbk') #编码
得到一个bytes类型
b
-
x.decode()
目前为止,讲的操作还在内存中,只适用于文本文件
内存的Unicode往外encode,结果都是bytes类型,基于网络传输的也是bytes类型
pycharm可以自订模板,Python Script模板中补充文件头
-
#!/usr/bin/python3 -*- coding:utf-8
-
第一行
#!/.../python3
Linux中使用python解释器,确定python解释器安装的路径。或着用env -
在主文件包含调用多个文件的时候,只有主文件的文件头是有用的
今日内容
open()功能的使用
-
模式介绍
-
控制文件读写内容的模式
-
t文本
-
b二进制(bytes)
-
-
控制文件读写的模式
- r只读模式
- w只写模式
- a只追加写
- r+,w+,a+
- 都有所限制
-
-
文件基本操作流程
- 打开文件
- 读写文件
- 关闭文件
-
资源回收与with语法
-
详细介绍文件模式
-
文件的操作方法
正课
文件
什么是文件?
- 文件是操作系统提供给用户 / 应用程序操作硬盘的一种功能
为何要用文件?
- 基于文件,用户/应用程序可以通过文件将数据永久保存到硬盘中
- 通过文件操作硬盘:向操作系统发起调用
如何用文件?
-
open(),两大类模式
控制文本读写内容的模式:t,b
t,b,不能单独使用,必须与w,r,a联用:控制的不是操作,而是指定操作的模式
- t 文本,默认的模式
- 读写都以 str (Unicode)为单位,不能直接存到硬盘中
- 必须指定 encoding = ’utf-8’,如果不指定,可能使用别的模式
- 都是文本文件,不适用别的文件
- b 二进制 / bytes
- t 文本,默认的模式
文件操作基本流程
三个步骤
- 打开文件
- 涉及两方面的资源:操作系统,应用程序内存
- 操作文件:读 / 写
- 读或着写,取决于你用什么模式
- 关闭文件
打开文件
open()
方法
打开文件中输入路径的两种方法:r + \ ,/
open(r'C:\a\nb\a.txt') # 使用rawstring,得到原字符串不转译
open('C:/a/nb/a.txt') # 使用左斜杠
有关绝对路径于相对路径
- 绝对路径 Absolute Path:从头开始 C:\Users\Administrator\Desktop\PYTHON\PYTHON上海\3.13
- 相对路径:以当前文件的文件夹为前缀(相对于当前文件夹),找到文件
open()
方法,返回一个文件类型,赋值给f:一种数据类型,占用应用程序(python)的内存空间
f = open(r'aaa/a.txt')
通过 mode = 'rt'
指定模式,默认的模式就是rt
操作文件
读 / 写 文件,应用程序的读写请求都是在向操作系统发送系统调用,然后由操作系统控制硬盘把文件读 / 写入内存
res = f.read() # 读文件方法
print(res)
关闭文件
f.close() # 调用操作系统功能,关闭操作系统打开的文件
del f # 解除变量名于文件的绑定,回收python中的内存,由于python中的自动回收机制,通常不需要考虑
在关闭文件之后,可以用已经赋值的 f 得到文件的内容。关闭文件后不能再对文件操作,此时再 f.read(),则报错
- 使用完文件后一定要关闭文件,因为操作系统同时打开的文件数目是有限的,打开多个文件不关闭会让别的文件打不开,系统性能下降
with 语法
with open('a.txt',mode = 'rt', encoding = 'utf-8') as f:
data = f.read()
print(data)
f 文件对象又称为文件句柄,用来控制文件
with:执行 with 后面的句子中的enter函数,得到的返回值赋值给 as 后面的变量,再执行with后面句子的退出函数
-
有了with语法之后,会自动调用open的 .close功能,不用怕忘记关闭文件
-
with 后面的执行语句可以有多个,也就是同时多个open() as f,两个执行语句之间用逗号
,
间隔 -
右斜杠
\
把一段代码分为两行,下一行还算在上一行一起执行,为了美观with open('a.txt',mode='rt') as f,\ open('b.txt',mode='rt') as g: data1 = f.read() data2 = g.read() print(data1) print(data2)
指定字符编码
open() ,f.read(),调用操作系统的功能,打开文件,将f读入内存。f文本在硬盘上存放的是以一种编码方式编码的二进制
with open('a.txt',mode='rt') as f:
f.read()
mode = ‘rt’ ,t模式规定得到的是str,也就是Unicode。本质上f.read读的硬盘中的文本是当时存入硬盘的格式,但是由于t模式,会将读出来的结果解码成Unicode。
如果没有encoding=的参数,操作系统会使用默认的编码:mac,Linux系统为utf-8,Windows默认为gbk。
为了在用文件时不乱码,要在open中指定编码 encoding='utf-8'
with open('a.txt',mode='a',encoding='utf-8') as f:
f.read()
f.write()
此时读,写都用的utf-8编码,就不会报错了
操作模式详解
r 只读模式
默认的操作模式,只读模式
-
文件存在时,文件的指针放到最开始的位置
-
with open('a.txt',mode='rt',encoding='utf-8') as f, data1 = f.read() print(data1)
f.read()
从当前指针开始,读到最后,指针移到文件的最后。 -
文件中的空格,换行实际上也是字符,会被读出来
-
把整个文件一次性读出来,文件过大的时候会有问题
改写用户登陆接口,把信息存入文件,重复运行或断电后仍能判断
-
改进,文件中一行一行存放多段用户信息,需要读的时候逐行读出来 :
for line in f: line.strip('\n').split(':') print(line, end='')
- for 循环用于逐行读取,一次读一个用户的信息
- end = ’‘ 去除print函数自带的换行符
- .strip(‘\n’) 去除原文件中,每个用户信息后面的换行
- .split(‘:’)分开每个用户名和密码
w 只写模式
with open('d.txt',mode = 'wt',encoding = 'utf-8') as f:
-
文件存在时,清空文件,指针位于开始位置
-
文件不存在时,创建文件
-
只写模式,不可读,用f.read功能会报错
可以调用 f.write
强调
-
在w模式打开文件,文件没有关闭的情况下,可以连续地写
随着write(),下一次写是顺着上一次写之后的光标位置接着写
with open('d.txt',mode = 'wt',encoding = 'utf-8') as f: f.write('111') f.write('122')
a 只追加写模式
with open('d.txt',mode = 'at',encoding = 'utf-8') as f:
pass
文件不存在时创建空文档,文件存在时,指针跳到最后
- 使用f.read()则报错,只能写不能读
- 使用write(),从指针位置开始写内容
w,与a模式的异同
- 在打开文件不关闭的情况下,连续地写入,新写的内容都会跟在之前写的内容之后
- 以a模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到末尾,通常用来纪录日志
案例
- a 模式,注册功能
- 拷贝文件:rt模式打开原文件,wt模式创建新文件,新文件.write(原文件)
可读可写模式
-
wt+
可以读可以写,指针在文件开头,顺着指针开始写,调用f.read()的时候从指针位置往后读
-
at+
-
rt+
可以读可以写,指针在文件开头,f.write()则在指针位置开始写,覆盖旧的内容