python文件操作与异常处理

一、文件操作

内建函数open,能够打开一个指定路径下的文件,返回一个文件对象。

open的两个参数:第一个参数是文件名,第二个是打开方式('r'、'w'、'a', 'b'依次表示读,写,追加写,二进制)。

1.内建函数:包含在_buildings_这个模块中的一些函数,而_buildings_这个模块python解释器会去包含使用dir(_buildings_)可以看到pythonyigongyounaxie 内建函数。

2.文件对象:C语言知道FILE*,通过FILE*进行读写操作;Linux中,FILE*包含文件描述符,Linux对其操作,python的文件对象,也包含了文件描述符。本质上也是对文件描述符操作。

3.读文件

1) read:读指定长度字数的数据,返回一个字符串(不是很常用)。

2) readline:读一行数据,返回一个字符串。

3) readlines:读整个文件,返回一个列表,列表中的每一项是一个字符串,代表一行的内容。

4) 直接使用for  line in f (f是文件)的方式循环遍历每一行,功能和readline类似,一次只读一行,此readlines占用内存少。

注意:readline或者readlines仍然会保留换行符,所以需要写这样的代码来去掉换行符。

 4.写文件

1)write:向文件中的每一段字符串写文件,必须按照‘w’或者‘a’的方式打开文件,否则会写失败。

2)writelines:参数是一个列表,列表中的每一个元素是一个字符串,并没有一个writeline这样的函数,因为这样就等价于write时在字符串后面加上‘\n’,使用writelines时,也要保证每个元素末尾都带有‘\n’.

5.读写缓冲区

1)C语言库函数中的fread,fwrite和系统调用read,write相比,功能类似,但是fread,fwrite是带有缓冲区的。python的文件读写操作,带缓冲区和不带缓冲区均支持。

2)open函数打开一个文件时,其实还有三个参数,可以指定是否用缓冲区,以及缓冲区大小。

3)flush:可以立即刷新缓冲区。

6.操作文件指针:文件具备随机访问的能力。

1) seek:将文件指针移动到文件开头算起的第几个字节上,有两个参数,第一个参数offset表示偏移的字节数;第二个whence表示偏移量的起始位置在哪,值为0,表示从开头计算;值为1,表示从当前位置;值为2,表示从文件结尾位置。

2)text:获取当前文件指针指向的位置,返回当前位置到文件开头的偏移量。

7.with语句:用完的对象,要及时关闭,否则可能会引起句柄泄露,但是如果忘记了手动调用close怎么办?C++中使用“智能指针”的方式来管理内存/句柄的释放,借助对象的构造和析构函数,自动完成释放过程,在python中对象的收回取决于GC机制,并不像C++中时效性那么强,Python中引入了上下文管理器来解决这个问题。

8.上下文管理器:在with语句块内进行文件操作,当文件操作完毕之后,除了with语句之外,就会自动执行的关闭操作。一个支持上下文协议的对象才能被应用与with语句中的这种对象。python中很多内置对象都是上下文管理器。eg:文件对象,线程锁对象等。

二、异常处理

1.含义:异常是指程序执行过程中,发生了错误,根据不同的错误类型,抛出不同类型的异常。

    如果一个程序抛出了异常,如果不对这个异常做任何处理,默认行为就是导致程序运行终止。

2.C++/Java/与python异常的区别:

python是解释执行的,所以语法错误和执行逻辑出现问题导致的错误都被python统一成了异常。

C++/Java预先对代码进行编译,如果语法出错,在编译期间就能检查出来,因此C++/Java的异常只有运行时错误。

3.异常机制:归根结底就是简化代码的错误处理逻辑。

调用一个函数,有可能会调用失败,C语言中通常会使用函数返回一个错误的值的方式来判定函数的成功失败,因此每个函数调用完成,往往需要检查一下函数都有返回值。

4.处理异常

1)我们使用try语句来捕捉异常(可能触发异常的代码放到try中),使用except具体处理异常。

2)如果异常能够被被except捕捉到,则不会影响程序继续执行。

3)IndexError,e相当于捉捕到的这个异常对象的名字e,这个异常对象中包含了异常的具体信息。

4)except 可以指定一个具体的处理哪种异常,如果try中抛出的异常类型,不在except中,那么仍然会程序终止。

5)一个try语句,可以和多个except语句联合工作。

6)一个try语句,还可以搭配else工作。

7)except可以不带具体的异常类型,这样只要try中触发了任意的异常,except都能捕捉到。

8)python中内置的异常类,其实都继承自Exception类。

9)如果想执行一些不管是否触发异常都要执行到的代码,可以放到finally语句块中。

5.抛出异常:使用raise关键字在代码中“抛出异常”。

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值