【前端人python学习日记】基础语法【三】
文件操作
操作文件的步骤
-
打开
-
读写
-
关闭
open()打开函数
open(name,mode,encoding)
三个常用参数,encodeing其实是第四个参数,所以我们用关键字传参,而不是位置传参
f=open("D:/测试.txt","r",encoding="UTF-8")
name要打开的目标文件名的字符串(可以包含目标文件的具体路径)
mode设置文件的访问模式(只读,写入,追加)
encoding编码格式,推荐使用UTF-8
mode常用的三种访问模式
读操作的相关方法
- 文件对象.read(num)
读取文件内容,num为读取文件的字节数,不传入num则读取所有数据
- 文件对象.readlines()方法
readlines可以按照行的方式,把整个文件内容一次性读取,返回一个列表,每一行数据为一个元素
- 文件对象.readline()方法
readlines可以按照行的方式,一行一行的读取文件内容
在程序中连续调用两次read,第一次读取的结尾会被记录下来
第二次调用read的时候,会从第一次的结尾继续读
在读文件的时候,只要文件打开,不管调用什么方法,文件都会从上一次读的结束位置继续开始
可以使用for一行一行的遍历文件内容
1 | for line in open("python.txt","r"): |
close()关闭函数
1 | f=open("python.txt","r") |
通过close关闭文件,如果不使用close关闭文件,并且不结束程序,那么python会一直占用该文件
with open语法
1 | with open ("python.txt","r") as f: |
通过with open操作文件,可以在操作完成后自动调用close进行关闭
基本写操作
1 | f=open("python.txt","w") |
write并没有完成文件写入的操作,只是将内容暂时存到内存中,等flush执行时将内存中的内容统一写入硬盘
这样的好处是不需要频繁操作硬盘导致效率下降
前端OS:这让我想到vue框架,收集dom操作,最后统一渲染到页面上去,这样就提高了效率和资源损耗,也让我想到了使用canvas画 板,在画完东西之后,需要执行stroke()才能真正画出东西
基本追加操作
不会像w一样覆盖原有内容,而是在原有内容后面接着写
1 | f=open("python.txt","a") |
write并没有完成文件写入的操作,只是将内容暂时存到内存中,等flush执行时将内存中的内容统一写入硬盘
异常
这还用我解释?
遇到bug的两种处理方式
- 不去理会,程序崩溃终止运行
- 对bug进行处理,程序继续运行
捕获异常
- 捕获常规异常
1 | try: |
- 捕获指定类型异常
1 | try: |
- 捕获多个异常
1 | try: |
- 捕获所有异常
1 | try: |
异常的else和finally语法
1 | try: |
前端OS:这finally好像promise的finally啊
异常的传递性
当函数func01中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数func02,当func02也没有捕获处理这个异常的时候main函数会捕获这个异常,这就是异常的传递性
前端OS:连续使用promise,可以在最后使用catch统一捕获错误
模块Module
前端OS:没必要解释,懂的都懂
模块的导入
[from 模块名] import [模块|类|变量|函数|*] [as 别名]
from和as可以不写
自定义模块
1 | #test.py |
1 | #当前文件 |
自定义模块的模块名,就是py文件名
引入同名的模块,类,变量,函数,后面引入的会覆盖前面引入的
__mian__
只有在自己原本的文件中__name__=="__mian__",这样可以在自定义模块中测试,又不用担心在引入模块时函数就调用
1 | def plus(a,b): |
__all__
1 | #test.py |
1 | from test import * |
自定义包
只有文件夹里有**__init__.py文件,才被称之为包**
__init__.py文件可以没有内容,但必须存在
__init__.py文件里会写__all__的配置
第三方包安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
在pip中使用清华大学提供的镜像下载第三方包
JSON
JSON数据格式用于在各种编程语言之间传递数据
前端OS:我可太熟悉了,我说怎么字典第一眼看上去这么眼熟,原来就是JSON
JSON和python中的字典,列表嵌套字典可以无缝切换,不能说相似吧,只能说是一模一样
JSON数据转化
将JSON数据与python数据之间互相转化
前端OS:是不是JSON.stringfly和JSON.parse啊?
- 引入JSON库
import json
- python数据转化成JSON数据
1 | data=[{"name":"张三","age":18},{"name":"李四","age":19}] |
中文转换时会有编码问题,我们可以设置**ensure_ascii=False**
1 | import json |



