python计算思维训练文件操作与异常处理_用Python进行文件的读、写、分析,异常处理和代码重构...

##本教程使用的课本是《Python编程:从入门到实践》,作者:[美] Eric Matthes

学完前面十二节课,已完成Python编程入门了,我们已经能编写组织有序而易于使用的Python程序了。接来下继续学习更多应用操作,比如文件操作、数据存储、异常处理等,这些技巧能让我们快速的处理大量的数据,让程序更加健壮。

一、文件读取

我们在python主程序文件的同一个目录下,新建一个文本文件testfile.txt,内容如下:

现在我们需要将该文件读出来,并打印在屏幕上:

withopen('testfile.txt',encoding='UTF-8') asfile_object:contents = file_object.read() print(contents)

上面的代码虽然只有三行,但是python做了大量的工作。

1、第一行的是一个with as语句,它先执行open()函数,然后将open()的返回值赋值给file_object。

2、open()函数,它的作用是打开一个文件,并返回一个文件的对象。参数'testfile.txt'是要打开的文件名,参数encoding='UTF-8'指用UTF-8的编码解析文件。

3、file_object.read()是调用read()函数,一次性读取文件的所有内容,以字符串的形式赋值给contents。

4、最后我们调用Print语句打印字符串contents。

5、文件的路径也可以使用绝对或相对路径,比如用绝对路径:c:\hello\testfile.txt。

几个读取函数介绍:

1、一次性读取文件

就是我们用的read()函数,上面已演示过,不再赘述。

2、逐行读取文件

可以用readline()函数,这里不介绍,大家自行研究。还有一种读取方法,见下面代码:

发现输出多了换行,是因为print语句本身有换行,我们禁止print输出换行即可。修改后的代码执行结果如下,发现没有多出换行了:

3、逐行读取并返回列表

需要用到readlines()函数,就是将各行作为列表的元素,最终返回包含文件内容的列表:

withopen('testfile.txt',encoding='UTF-8') asfile_object:lines = file_object.readlines()print(lines)

列表元素包含了每行尾部的换行符“\n”,有了这个列表,我们可以用列表的各种操作对数据进行处理。

二、写文件

有时候需要将数据存储在文件中,需要用到写操作,只需要两行代码就可以实现文件的写入,请看代码:

withopen('testwrite.txt','w',encoding='UTF-8') asfile_object:file_object.write('这是我第一个写文件')

1、open()函数多了个参数‘w’,这是告诉open()函数,用写模式打开这个文件,下面是几种常见的打开模式:

读取模式:('r')

写入模式:('w')

附加模式:('a')

读取和写入文件的模式:('r+')

2、上面代码执行后会在本目录产生一个testwrite.txt文件,因为如果文件不存在,write()函数会自动创建函数,如果文件存在,write()函数会覆盖原文件,因此操作要十分慎重!

三、向文件尾部追加信息

我们试试‘a’附加模式,这种模式不会覆盖文件的内容,只会在文件的尾部增加信息。

四、异常处理

我们来看一个经典的案例,看如下代码的执行结果:

因为0不能作为除数,所以代码会报错,第二条print语句就没法执行,上面这种情况就叫异常。

为了能让程序继续执行下去,我们要对异常进行处理,就叫异常处理。Python中用try-except代码块来处理异常,我们对上面代码稍加改造,看看效果:

try:print(5/0)except: print('发生了未知的错误!')print('除法执行完毕!')

可以看到,这次程序没有报错,第二条print语句也执行了。通过对异常的处理,我们可以避免程序崩溃。

Python定义了很多异常,我们可以对上面的代码稍加改造,让报错的信息更加准确一些。每种异常类型都提供了如下几个属性和方法,通过调用它们,就可以获取当前处理异常类型的相关信息:

try:print(5/0)exceptZeroDivisionError ase: print(e.args) #返回异常的错误编号和描述字符串; print(str(e)) #返回异常信息,但不包括异常信息的类型; print(repr(e)) #返回较全的异常信息,包括异常信息的类型。else: print('除法执行完毕!')

上面的代码中,我们加了个else语句,只有try代码块没有发生异常时才会执行else语句块的内容。

常见的异常还有FileNotFoundError这是文件不存在的异常,如果想更加详细的使用异常信息,可以使用 traceback 模块,大家可以自行上网搜索相关资料。

五、分析文本

读取了文件的内容后,可以对文件进行各种分析,比如我们想提取ping命令执行后的ip地址,可以用split()函数将文件的内容组织成列表,然后在列表中查找ip地址。

Ping命令的执行结果如下,要得到这个结果,可以在cmd命令窗口下执行如下命令:

ping > d:\kkk.txt

执行后再D盘根目录下有个kkk.txt文件,里面存储的就是ping命令的执行结果。

提取文件中ip地址的代码如下,我们顺利提取了四个ip地址:

try:withopen('testfile.txt','r',encoding='UTF-8') asf_obj:contents = f_obj.read()exceptFileNotFoundError ase: print(e.args) #返回异常的错误编号和描述字符串;else: lc = contents.split()forcontent inlc:ifcontent == '来自': print(lc[lc.index(content)+1])

代码说明:

1、前6行的代码我们都很熟悉,就是打开文件,然后读取文件内容,为了避免文件不存在程序崩溃,我们加了异常处理。

2、第7行的lc是一个列表,split()函数的作用就是将文件内容以空白字符为分隔符,分割文件内容作为列表的元素。

3、8到10行是查找列表中有“来自”两字的元素,并打印它的下一个节点。函数lc.index(content)是返回当前元素的列表索引值,将这个值加1就是下一个节点。

六、用JSON数据格式存储数据

JSON数据格式被很多语言采用,用它存储数据可以轻易进行数据分享,因此有必要了解它,在Python中是调用用json模块来实现对数据的json操作。

比如我们要写一个登陆程序,用户第一次登陆需要输入用户名,第二次登陆就不用再输入了,直接打印欢迎信息,用json来存储用户名。

上面的代码其实就是一个try-except-else模块而已。第一行用Import导入json模块。第一次执行会提示输入用户名,输入后会创建一个testfile.txt的文本文件,并使用json.dump()函数将用户名存入文件。第二次执行就直接从文件读取数据,打印“欢迎回来…”

七、重构

上面的代码能够执行的很好,但我们还可以继续优化,改编成用几个独立函数来负责不同的功能,这个过程叫重构。重构后的代码更加清晰,易于理解。从功能上讲,上面登录程序有两大功能,一个是读取用户名并展示,另外一个是注册新用户,因此我们可以将上面的功能分别用两个函数get_user()和write_username_use()表示,最后的主程序只有一句话,print_user(),请看代码:

importjsondefget_user():'''获取用户名,否则返回空值'''try:withopen('testfile.txt', 'r', encoding='UTF-8') asf_obj: contents = json.load(f_obj)exceptFileNotFoundError ase:return Noneelse:returncontentsdefwrite_username(): '''获取用户输入的用户名,并写入文件中''' username = input('请输入您的姓名:')withopen('testfile.txt','w',encoding='UTF-8') asf_obj: json.dump(username,f_obj) print('感谢您的注册,'+ username)defprint_user(): '''登录程序''' username = get_user()ifusername: print('欢迎回来!'+username)else: write_username()print_user()

总结:本文介绍了文件的处理方法,包括读、写、分析文件、异常的处理等,最后介绍了代码的重构概念,感谢大家的耐心观看。长按文末点赞送三连,支持本文作者多写点~

#Python入门教程#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值