##本教程使用的课本是《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入门教程#