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

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:
        pass

data.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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值