1.10【Python】第十章 文件和异常

人工智能入门与实战第一季:python基础语法

本章是我们python基础的最后一个章节,看到这里的小伙伴们那都是真爱了,给自己点个赞!继续加油!

解决问题的思路

前面章节都是按照对应的知识点一一讲解,作为最后一章,我们换个思路来学,假如你在工作中遇到了文件相关的问题需要处理,而你之前并没有了解过这一块,那么你该怎么样去解决这个问题呢?

我们都知道遇到问题最好不要上来就问别人,我们需要先自己去思考并寻求答案,比如官方文档、百度、谷歌都是很好的方式,一般遇到问题我们首先是看看系统有没有提供相应的模块和方法,如果没有我们再找第三方是否有提供。

基于以上思路我们先去python的官方去看看,有没有我们想要的东西?
1、 打开python官方网站:https://www.python.org
2、选择Python 3.x Docs

3、在模块章节我们简单介绍了python的标准库,我们打开看一看(左上角可以切换为中文,对英文不好的小伙伴非常友好):

4、我们可以从‘标准库参考’进入以下界面:

5、打开内置函数,我们可以看到有一个open函数,这便是我们要找到第一个操作文件的函数:打开文件

这些内置函数是在内置模块builtins.py中的,我们发现该模块中的很多函数我们在前面都已经使用,例如abs()、int()、str()、len()、list()、tuple()、dict()等等。

可能你会说我怎么知道在内置函数中有个open()函数可以打开文件?对于初学者来说确实有点困难,那么我们还可以通过搜索引擎搜索关键字:‘python 文件操作’,也能找到答案,以后再慢慢学会使用官方文档,因为这里才是最新、最标准的资料。

open()函数的使用
我们进入open()函数的界面,里面会有具体的使用方法介绍:

当然我们也可以在开发环境中,例如pycharm中直接点击程序中的open()函数,进入查看:(windows是ctr+单击、mac是command+单击)

open()函数以及文件相关的具体操作

我们创建一个格式为txt的文件,命名为file1,在同级目录下创建一个主模块se1_ch10_file_exception.py,在此模块中执行以下程序。

1、以只读的方式打开文件

# 只读模式打开文件,如果没有此文件时会报错
file1 = open('file1', 'r')

print(file1.read())

# 读取位置定位到开始位置(通过file1.read()执行完之后,当前读取位置在文件末尾)
file1.seek(0)

# 文件内容以列表list形式返回
print(file1.readlines())

# 手动关闭文件
file1.close()

使用with open() as 的形式打开文件

# 自动关闭文件,无需调用close方法
with open('file1', 'r') as file1:
    print(file1.read())

2、打开文件,覆盖写入,没有文件会先创建

file2 = open('file2', 'w')
file2.write('hello boys')
# \n转义字符,换行
file2.write('\n')
file2.writelines(['hello girls'])
file2.close()

3、打开文件,追加写入,没有文件会先创建,在文本模式,如果 encoding 没有指定,则根据平台来决定使用的编码

建一个temples文件夹,在此路径下操作文件

with open('temples/file3', 'a', encoding='utf-8') as file3:
    file3.write('\rhi dudy')
    # \r 回车
    file3.write('\r')
    file3.write('你好')

4、可读可写

with open('temples/file3', 'r+') as file3:
    print(file3.read())
    file3.write('\r加点料')

最后生成的文件:

异常

如果我们没有按照程序预期的条件调用属性、方法、传参等操作,程序会抛出异常以提示程序的出错原因

到目前为止我们已经遇到了多种异常(控制台报错):
ValueError: 类型转换时,数据类型错误
AttributeError: 调用了某对象不存在的属性或方法
KeyError: 字典使用了不存在的键
ImportError: 导入不存在的模块
IndexError: 列表索引越界
FileNotFoundError: 只读模式打开文件时,文件不存在
...等等...

...这些异常定义在内置模块builtins.py中,感兴趣的可以自行查看...

当异常发生时,程序报错,且终止运行,这显然不是我们希望的,那么此时我们应该如何处理呢?

先给出处理异常的完整语法格式:

try:
    无异常时执行
except 异常1:
    有异常1时执行
except 异常2:
    有异常2时执行
except 异常n:
    有异常n时执行
else:
    无异常时执行
finally:
    有无异常均执行

接下来我给你举两个例子:
1、写一个字符串转整型的函数

def str_to_int(str):
    return int(str)

# 正常传参
print(str_to_int('123'))

# 传入非数字型字符串时报ValueError错误
print(str_to_int('你好'))

为了增加str_to_int()函数的健壮性,我们可以这样处理:

def str_to_int(str):
    try:
        return int(str)

    except ValueError:
        # 当发生ValueError异常时执行
        print('参数异常')


# 调用
str_to_int('你好')

输出结果:
参数异常

2、打开文件 只读
如果当前路径下没有提前创建test.txt文件,会发生FileNotFoundError异常

file = open('test.txt', 'r')

我们可以重新定义一个open方法,并当异常发生时做容错处理:

def my_open(path):
    try:
        file = open(path, 'r')
        file.close()
    except FileNotFoundError:
        print('没有找到此文件')

# 调用
my_open('test.txt')

输出结果:
没有找到此文件

关于异常你学会了吗?总结一下:以后我们在写程序时,可以在程序中加入异常的处理以提高程序的健壮性,这是很好的编程习惯。

本章作业

创建一个文件名叫myfile的文件,在文件中分三行写入自己的姓名、年龄、爱好,然后再加入异常的处理。

本章总结

到这里,我们人工智能系列课程之一的python基础就结束了,python基础从第一篇文章的发布到最后一篇文章,大概历时一个半月的时间,全靠业余时间的撰写,进度我还比较满意,接下来我会继续下一个阶段:科学计算库的系列文章的编写,疫情期间,大家注意安全,在家可以多充充电,小伙伴们,我们一起加油努力!

我是猪弟爸爸,这里我会持续更新人工智能自学内容,有问题请关注我的公众号zhudipapa,我会统一在公众号下方回复,同时你也可以第一时间收到我的推文,我们下节见。

你可能感兴趣的:(1.10【Python】第十章 文件和异常)