caxa发生文件读写异常_【挑战自学Python编程】第十一天:文件读写与异常处理...

本文介绍了Python编程中的文件读写操作,包括open()函数的使用,读写模式(r、w、a、r+、w+、a+)的详细解释,以及如何使用with语句优化文件操作。同时,文章还讲解了异常处理的基础,通过try-except结构处理运行时错误,以避免程序因异常而崩溃。最后,文章简要探讨了JSON文件的使用,包括json.dump()和json.load()函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5a5fcf4e6f841e3fb269224d1457bcb6.png

摘要:

  1. 文件读写
  2. 异常处理

f3bfc1d9b61509a9747170c217e144e6.png

01 文件读写

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

5defff3a295e7f73e5095084f98d07cc.png

f3bfc1d9b61509a9747170c217e144e6.png

打开并读取文件

open() 函数

这是一个Python的内置函数,可用于打开文件。我喜欢这样来描述它的语法

特点:open(文件路径,读写模式)

当然,实际上可以向open()函数传递三个实参,但目前我们只用到两个。这里说到的文件路径可以分为两类:绝对路径与相对路径。

绝对路径,也可以理解为完整路径,就是类似这种:C:UserslastjDesktopBooks 的文件路径,包含了其所属的磁盘与文件夹的名称,

相对路径,相比绝对路径比较简单,这种路径是指,以程序文件所在文件夹为初始位置的路径。这就意味着,如果程序文件与所要读取的文件在同一个文件夹中,则可直接使用文件名用作路径。

使用方法read(),可以读取文件中的数据,并以字符串的方式返回。

接下来,我们看示例:

首先,我准备了一个txt文本文件,里面包含了圆周率小数点后的一千位,如下图:

211a06656415741c5d6557018c0b3db2.png

(这一行很长没有完全显示)

然后,使用open()函数来读取,并使用print()函数来打印出来:

09bf99f6cdc2c7280fd55546cb422c6f.png

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

程序文件与所要读取的文件在同一个大文件夹中,但是所要读取的文件在其中的一个子文件夹中,此时,我们要如何使用相对路径呢?

bdabd2eafe333c3741250707df1b4c2e.png

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

b65254b5cc7c8f0951b062342856d87e.png

要注意,路径用字符串表示

然后,再来介绍读写模式。

读写模式:(这里只介绍以下几种,在以后有需要的时候将继续了解)

只读模式(r)

只可读取,不可对文件进行修改,写入,或删除等一切编辑。文件指针(就是那个鼠标光标)处于文件开头。

写入模式(w)

不可读取,只可写入,且会将文件中的原有内容删除,然后从头开始写入,若文件不存在,则会创建一个文件然后写入。

附加模式(a)

只可写入,但是文件指针在文件末尾,且不会删除原有内容。

读写模式(r+,w+,a+)

可读取,可写入。其中,r+模式的文件指针在文件开头;w+模式将删除原有内容;a+模式的文件指针则在文件末尾。

括号内的字母是该模式的代码。

有一点要注意,我们使用open()函数来打开文件,实际上,是创建了一个文件对象,然后我们将其储存到了一个变量当中,再对其进行修改,读写。

除了上面那种使用方式外,我们可以利用关键字with与as进行优化:

0e814aac3c62e072271e028285512dc6.png

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

写入并保存文件

write()方法

使用方法write(),我们可以对文件对象进行写入,修改。接下来,我们尝试创建一个文件,并写入一些数字。使用如下程序:

a9c62aa523c94fb1911e066a0f07bad9.png

运行程序前,无文件

3b8f6a16e503f5f4fd039a59dac16f02.png

运行后:

7d6c2495ebf1a9042351c20c812a110a.png

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

a9c62aa523c94fb1911e066a0f07bad9.png

可以看到,指定模式时,将对应模式的代码(如写入模式是w)用引号扩起,使用open创建文件时也应包含文件后缀名。

利用这些代码,我们就可以使用程序收集用户的信息并将其以文件的形式保存下来。

1b66187b6d1de1559640d19954ed37ee.png

2ef793c397aab7a1886c2285482530d7.png

然后我们来看文件内容:

edeec32d2a5a17c3a9fce0dd10cf5b55.png

当然,格式需要进一步的调整。

要注意的是,方法write()在写入时并不会换行。

f3bfc1d9b61509a9747170c217e144e6.png

异常处理

首先,我们来回顾以下异常。

比如我现在运行一个程序,使其打印出5÷0的结果

a3f1b09ccd9d049ead5de7a5a1aa3ec2.png

然后你就会获得这样的错误提示,这样就是程序运行中的异常与错误。

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

3c80a7858e4007c4e1e29b02f8bfea6d.png

还是这张图,但关注点放在用红线标出的两处。

Traceback单词的本意指回溯,在这里可以看作反馈。在Traceback之后的,就是python解释器给出的错误提示,告诉你是什么类型的错误。而诸如用红框所标出来的:ZeroDivisionError就是Python内置的错误类型,你可以将其视为一种特殊的关键字。

下图是Python的内置错误类型,详细的解释见Python官网。

https://docs.python.org/zh-cn/3/library/exceptions.html#bltin-exceptions

6a43b4b983be2776c7c7e4eaf8572aa0.png

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

0dfc4988a58a8a19dfd441c084875fc0.png

使用try-except结构

try意为 尝试,而except意为 除了。

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

下图是运行结果实例:

60c260f94fd05e990edfde96dae2f2c6.png

.json文件

JSON,全称为JavaScript Object Notation,是一种数据交换格式(这是行业内制定的一种标准格式)。起初是为编程语言JavaScript所设计的,但现在被多种编程语言包括Python在内使用,使用json文件就可以使得你的数据能够被多种的语言识别并使用。

接下来,我们尝试使用Python内置的json模块。

首先认识两个函数json.dump()与json.load()

json.dump(),接受两个实参,第一个实参为要写入的内容,第二个实参为写入的文件对象。

json.load()则是可以读取文件对象中的内容。

json.dump() 示例:

366d7c769ea9c7a8719d06dbb4836d63.png

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

4d81cb806acb44dac35ef3cece335342.png

f3bfc1d9b61509a9747170c217e144e6.png

加入我们一起【挑战自学Python编程】

明日内容:习题练习与代码测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值