c++读取json文件_【挑战自学Python编程】第十一天:文件读写与异常处理

3237f55859af4dbf3e374f7d6e2c9177.png

摘要:

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

f4532da6d82c6b8b6bd1687eed9ef9d5.png

01 文件读写

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

5c78210e595db7006ed7ccb1371e2946.png

f4532da6d82c6b8b6bd1687eed9ef9d5.png

打开并读取文件

open() 函数

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

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

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

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

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

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

接下来,我们看示例:

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

8cda536d338b99a72621b9ba4449eec3.png

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

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

30aa71151c01014983a0f6c2d8fce8df.png

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

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

5a1ce9edb3040ff65c081976c1502e9f.png

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

6f80061db37fd8102be1fa9a70ffb009.png

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

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

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

只读模式(r)

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

写入模式(w)

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

附加模式(a)

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

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

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

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

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

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

1fb9cd262b5ecdaf2b15cfc366f6f952.png

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

写入并保存文件

write()方法

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

28b46d2decf20d693ac5ff5a68b6f7b9.png

运行程序前,无文件

ef547e1ff4cd8a54cf81e876c0825e9e.png

运行后:

8c25831e76c848e8ae14b97ca361e80c.png

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

28b46d2decf20d693ac5ff5a68b6f7b9.png

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

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

cc6bc0e80202cf9162479ff0a9497364.png

2c3bf358f98a907d42882abc16900b3c.png

然后我们来看文件内容:

3199c41fd62d7124105e8c4e3cd46b6a.png

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

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

f4532da6d82c6b8b6bd1687eed9ef9d5.png

异常处理

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

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

43da9b0ceef98ae65bc8b1d9036370c0.png

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

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

b64c1197b5b2ed6e6f17837371ebcf48.png

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

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

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

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

f5f4651084c3e3adb65cff8afceec092.png

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

ce3035fabd85a99bc6a69bd6744c617b.png

使用try-except结构

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

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

下图是运行结果实例:

f1ad455c568aa4ceda311c90366a3646.png

.json文件

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

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

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

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

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

json.dump() 示例:

af5c76c16cbce1a3c610f136971c5b5f.png

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

dd784eeca21999847c816c51cd89e749.png

f4532da6d82c6b8b6bd1687eed9ef9d5.png

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值