Python学习笔记-文件与异常
l Python如何从文件中读取数据?
Python中的基本输入都是基于行的:从文本文件向程序读入数据时,一次会读取一个数据行。Python中的BIF的open() 就是用来与文件交互的。用for语句与open()结合就可以逐行读取文件了。
Python处理文件的标准:“打开-处理-关闭”
the_file = open (‘文件名.后缀名’)
#文件处理过程
the_file.close()
python处理文件的过程实例:
>>>import os //从标准库中导入“os”
>>> os.getcwd() //获取当前工作路径
'C:\\Python33'
>>> os.chdir('D:\kankan') //修改路径
>>> os.getcwd() //确认当前路径
'D:\\kankan'
#打开数据文件,从文件中读取前两行,并在屏幕上显示出来。
>>> data = open('test.txt') //打开文件
>>> print(data.readline(),end = '')
jhfaflalfbalbfaljbfehfa
>>> print(data.readline(),end = '')
把家乐福克拉夫拉风吧
#“退回”到文件的起始位置,以下两种方法都可以。前提是对python
>>> data.seek(0)
0
>>> data.tell()
0
#用for语句处理读取文件的过程
>>> for each_line in data:
print(each_line,end = '')
jhfaflalfbalbfaljbfehfa
把家乐福克拉夫拉风吧
伐啦空间和flag发
阿发家里不回家elf卡爆了
办法label发
#关闭文件
>>> data.close()
分析我们处理的文件,有时文件可能存在某种固定的格式,当我们分析这种格式时,为什么不想想,我们怎么按照这种格式来分割文件呢?python提供了一个BIF也即split()
来处理文件。但是,我们需注意的是我们的文件,可能并不完全根据一种格式来处理的,所以有可能出现不可预料的错误。怎么处理这些错误呢?有两种截然不同的方法:
1、 要处理大量意外的情况时,最好的方法就是增加代码的逻辑来进行处理,如果更多的担心问题,就写更多的代码。
2、 当然,也可以允许这种错误发生,然后只需要在各个错误确实发生时,分别处理响应的错误。(异常处理)
在第一种方法中,我们可以利用python提供的find() 来验证文本的某一行是否符合格式,然后进行响应的处理。我们可以看看find的用法:
>>> studentnum = "2012120810"
>>> studentnum.find('8') //find查找字符窜是从0开始编序号的
7
>>> studentnum.find('9') //如果没有匹配的字符,就返回-1
-1
l Python如何处理异常?
代码出现问题时,python的解释器会显示一个traceback,后面跟着一个错误消息。正是这样,python通过traceback来告诉我们运行时发生了什么意外的情况,在python的世界里,运行时错误叫做异常(exception)
Python的异常处理允许错误的出现,但监视它的发生,然后给你一个机会来恢复,当然,如果你选择放弃处理,程序就会崩溃。在正常的python控制流程里,python尝试运行你的代码,如果没有任何问题,代码会继续正常执行。在异常控制流程里,python先尝试运行你的代码,如果发现问题,就会先执行恢复代码,然后继续执行你的代码。
Try/except机制:在运行时系统地处理异常和错误。其格式如下:
try:
your code
except:
error code dealing process code
l 处理缺少的文件:如果你处理的文件不存在了,那么会报一IOerror错误,并生成一个traceback的异常。所以,在处理文件前,我们可以先检测该文件是否还存在当前路径上,可以通过以下方式检测: if os.path.exist(‘filename.txt’): 或者 在我们打开文件和处理文件的整体代码加上一个try/except处理。
l 特定指定异常:如果你的异常处理代码设计为处理一种特定的异常处理程序,一定要在except代码行上指定错误类型。当然,如果出现一个不同类型的运行时错误,你的代码将不在处理这个错误,但是至少现在你对这个异常已经有所认识,如果特定指定了代码要处理的某种特定的运行时错误,你的程序就不会在悄无声息的忽略默写运行时错误了。
*split()方法执行时,它传回一个列表,不过目标标示符包围在小括号之间,而不是包围在中括号之间,这是一个列表吗?python中实际上有两种类型的列表:一种是可以改变的列表(使用中括号);另外一种是一旦创建就不能改变的列表(使用小括号),它更像一个数组。
*遇到异常,可以放过吗?的确可以,当你遇到一个异常,有不想处理时,可以使用pass.