Python初入门(三)(Head First Python 第三章 文件与异常)

来源:互联网 发布:国产三维cad软件 编辑:程序博客网 时间:2024/05/16 06:40

Python如何从文件中读取数据

Python中的基本输入机制是基于行的:从文本文件向程序读入数据时,一次会到达一个数据行。

这里写图片描述

上图中,从标准库导入”os”
os.getcwd()的作用是查看当前工作目录
os.chdir()的作用是用于改变当前工作目录,其参数为Path 目标目录,可以是绝对目录或相对目录。

这里写图片描述

Python的open()BIF是用来与文件交互的,使用open()BIF处理文件中的数据时,会创建一个迭代器从文件向你的代码输入数据项,一次传入一行数据。
data=open(‘sketch.txt’) ——打开一个文件,并赋值给文件对象data
data.readline() ——使用readline()方法从文件获取一个数据行,这一点与java一样。
而end=’ ‘意思是末尾不换行,加空格。这个是python3的功能,python2会报错。

这里写图片描述

seek() 方法用于移动文件读取指针到指定位置。0表示文件开头。
close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。 使用 close() 方法关闭文件是一个好的习惯。


异常处理

我们可以发现大部分数据行都是类似Man: Is this the right room for an argument?这样的的形式,这里我们可以对它们进行切割处理。

split()方法返回一个字符串列表,这回赋至一个目标标识符列表。这称为多重赋值。

在切割的过程中,我们发现有些数据行中不止一个:,这个问题我们可以利用each_line.split(‘:’,1)解决。
split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串。

我们还发现有些数据行不包含冒号,split()方法查找冒号时就会出现问题。我们可以增加额外逻辑,即事先对数据行进行判断。
find()会在一个字符串中查找一个指定子串。

data=open('sketch.txt')for each_line in data:    if not each_find(':')==-1:        (role,line_spoken)=each_line.split(':',1)        print(role,end='')        print(' said:',end='')        print(line_spoken,end='')data.close()   

然而这意味着更大的复杂性,所以我们更推荐另一种方法,异常处理

处理异常

try/except机制,这和java的try/catch机制十分相似,提供了异常处理进制,从而保护可能导致运行时错误的某些代码行。

data=open('sketch.txt')for each_line in data:    try:        (role,line_spoken)=each_line.split(':',1)        print(role,end='')        print(' said:',end='')        print(line_spoken,end='')    except:        passdata.close()    

如果你的异常处理代码设计为处理一种特定类型的错误,一定要在except代码行上制定错误类型,这样一来,就可以把一般化的异常处理代码转变为具有特定性。

try:    data=open('sketch.txt')    for each_line in data:        try:            (role,line_spoken)=each_line.split(':',1)            print(role,end='')            print(' said:',end='')            print(line_spoken,end='')        except ValueError:            pass    data.close()except IOError:    print("The data file is missing!")

这一点和java的catch(IOException e)十分相似

阅读全文
0 0