
摘要:
- 文件读写
- 异常处理

01 文件读写
日常使用电脑的过程中,我们常常见到各种各样的文件,不同的后缀则代表该文件是不同的类型,但无论是何种文件,其本质都是一行行的数据,接下来,我们学习简单的文件读写。


打开并读取文件
open() 函数
这是一个Python的内置函数,可用于打开文件。我喜欢这样来描述它的语法
特点:open(文件路径,读写模式)
当然,实际上可以向open()函数传递三个实参,但目前我们只用到两个。这里说到的文件路径可以分为两类:绝对路径与相对路径。
绝对路径,也可以理解为完整路径,就是类似这种:C:UserslastjDesktopBooks 的文件路径,包含了其所属的磁盘与文件夹的名称,
相对路径,相比绝对路径比较简单,这种路径是指,以程序文件所在文件夹为初始位置的路径。这就意味着,如果程序文件与所要读取的文件在同一个文件夹中,则可直接使用文件名用作路径。
使用方法read(),可以读取文件中的数据,并以字符串的方式返回。
接下来,我们看示例:
首先,我准备了一个txt文本文件,里面包含了圆周率小数点后的一千位,如下图:

(这一行很长没有完全显示)
然后,使用open()函数来读取,并使用print()函数来打印出来:

如图,我们可以看到,在这里,我们使用了相对路径,因为此时所要读取的文件与程序文件在同一个文件夹中。那么,如果是以下这种情况,是否还行的通呢?
程序文件与所要读取的文件在同一个大文件夹中,但是所要读取的文件在其中的一个子文件夹中,此时,我们要如何使用相对路径呢?

使用反斜杠 (由左上到右下,斜杠则是由右上到左下),看下面的示例:

要注意,路径用字符串表示。
然后,再来介绍读写模式。
读写模式:(这里只介绍以下几种,在以后有需要的时候将继续了解)
只读模式(r)
只可读取,不可对文件进行修改,写入,或删除等一切编辑。文件指针(就是那个鼠标光标)处于文件开头。
写入模式(w)
不可读取,只可写入,且会将文件中的原有内容删除,然后从头开始写入,若文件不存在,则会创建一个文件然后写入。
附加模式(a)
只可写入,但是文件指针在文件末尾,且不会删除原有内容。
读写模式(r+,w+,a+)
可读取,可写入。其中,r+模式的文件指针在文件开头;w+模式将删除原有内容;a+模式的文件指针则在文件末尾。
括号内的字母是该模式的代码。
有一点要注意,我们使用open()函数来打开文件,实际上,是创建了一个文件对象,然后我们将其储存到了一个变量当中,再对其进行修改,读写。
除了上面那种使用方式外,我们可以利用关键字with与as进行优化:

在with后使用open()函数,然后使用as将文件储存到变量file中,然后以冒号结尾,运行缩进代码。这样做的好处就是,文件在被打开,执行过操作之后,就会被关闭。要知道,每使用open()语句打开一个文件,该文件就会占据一定的运行内存(虽然你不会看到文件打开的窗口),如果大量文件未被及时关闭的,就会造成运行内存占用过高的问题,直接结果就是电脑在运行了该程序之后极易卡顿甚至死机。使用关键字with与as ,就可以避免使用close()指令来关闭文件。
写入并保存文件
write()方法
使用方法write(),我们可以对文件对象进行写入,修改。接下来,我们尝试创建一个文件,并写入一些数字。使用如下程序:

运行程序前,无文件

运行后:

然后,我们再回到这两行程序:

可以看到,指定模式时,将对应模式的代码(如写入模式是w)用引号扩起,使用open创建文件时也应包含文件后缀名。
利用这些代码,我们就可以使用程序收集用户的信息并将其以文件的形式保存下来。


然后我们来看文件内容:

当然,格式需要进一步的调整。
要注意的是,方法write()在写入时并不会换行。

异常处理
首先,我们来回顾以下异常。
比如我现在运行一个程序,使其打印出5÷0的结果

然后你就会获得这样的错误提示,这样就是程序运行中的异常与错误。
如果不对这样的错误进行特殊处理的话,那么假设你使用Python实现了计算器的功能,但是当用户输入类似5÷0这样的结构的时候,你的程序就会崩溃

还是这张图,但关注点放在用红线标出的两处。
Traceback单词的本意指回溯,在这里可以看作反馈。在Traceback之后的,就是python解释器给出的错误提示,告诉你是什么类型的错误。而诸如用红框所标出来的:ZeroDivisionError就是Python内置的错误类型,你可以将其视为一种特殊的关键字。
下图是Python的内置错误类型,详细的解释见Python官网。
https://docs.python.org/zh-cn/3/library/exceptions.html#bltin-exceptions

那么我们在这里,就用错误类型ZeroDivisionError(翻译过来就是除以0错误)充当实例,来看看如何避免这个问题。

使用try-except结构
try意为 尝试,而except意为 除了。
那么使用这个结构,在运行时就会先尝试运行try语句的缩进代码,如果出现了错误,则会运行except部分的测试,如果所出现的错误类型与except后所标注的错误类型一致,那么就会执行except的缩进代码。若无错误出现,那么except部分将被跳过。
下图是运行结果实例:

.json文件
JSON,全称为JavaScript Object Notation,是一种数据交换格式(这是行业内制定的一种标准格式)。起初是为编程语言JavaScript所设计的,但现在被多种编程语言包括Python在内使用,使用json文件就可以使得你的数据能够被多种的语言识别并使用。
接下来,我们尝试使用Python内置的json模块。
首先认识两个函数json.dump()与json.load()
json.dump(),接受两个实参,第一个实参为要写入的内容,第二个实参为写入的文件对象。
json.load()则是可以读取文件对象中的内容。
json.dump() 示例:

接下来,我们读取刚才创建的json文件,并打印出来。


加入我们一起【挑战自学Python编程】
明日内容:习题练习与代码测试