Python进阶——open函数

Open函数

open函数通常用来打开一个文件;
例如,通常会这样写:

fs=open('fs.txt','r+')
data=fs.read()
fs.close

以上例子存在的问题
显示的调用了close()函数,如果在read处出现了异常,那么close将不会被调用。
为了确保无论是否有异常出现,都要确保文件被close,我们将open包装在with函数内。

with open('fs.txt','r+') as tf:
    data=fs.read()

open的第一个参数是文件名。第二个(mode打开模式)决定了文件如何被打开:

  1. 读取文件,r
  2. 读取并写入文件,r+
  3. 覆盖写入文件,w
  4. 在文件末尾附加内容,a
  5. 其他还有几个,但有可能永远都用不上。

mode很重要,不仅因为它改变了行为,而且它可能导致权限错误。举个例子,我们要是在一个写保护的目录里打开一个jpg文件, open(…, ‘r+’)就失败了。mode可能包含一个扩展字符;让我们还可以以二进制方式打开文件(你将得到字节串)或者文本模式(字符串)。

一般来说,如果文件格式是由人写的,那么它更可能是文本模式。jpg图像文件一般不是人写的(而且其实不是人直接可读的),因此你应该以二进制模式来打开它们,方法是在mode字符串后加一个b(你可以看看开头的例子,正确的方式应该是rb)。如果你以文本模式打开一些东西(比如加一个t,或者就用r/r+/w/a),你还必须知道要使用哪种编码。对于计算机来说,所有的文件都是字节,而不是字符。
在Python 2.x 版本里,open不支持显示的提供指定编码,然而,io.open函数有提供,可以传入encoding这个关键字参数来传入编码。
越来愈多多的文本格式将编码定义为UTF-8
举个例子,读取一个文件,坚持它是否是JPG(JP文件头部以字节FF D8开始),然后对输入文件的描述写入一个文本文件。

import io
with open('photo.jpg','rb') as inf:
    jpgdata=inf.read()
if jpgdata.startswith(b'\xff\xd8'):
   text=u'This is a JOEG file (%d bytes long)\n'
else:
   text=u'This is a random file (%d bytes long)\n'
with io.open('summary.txt','w',encoding='utf-8' as outf:
    outf.write(text % len(jpgdata))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值