python 学习笔记 【file】

一、文件 file

通常建议用内置函数 open() 打开文件,file 用于类型判断。

>>> with open("test.txt", "w") as f:
...     print isinstance(f, file)   // 类型判断
...     f.writelines(map(str, range(10)))

True

File Object 实现了上下文协议,可确保文件被及时关闭。实际上,文件对象被回收时总是会调用 close 方法,所以可以写下面这样的代码。

>>> open("test.txt", "r").read()
'0123456789'

如果要把数据写到磁盘上,除调用 flush() 外,还得用 sync(),以确保数据从系统缓冲区同步到磁盘。close() 总是会调用这两个方法。

打开模式:

  • r: 只读。
  • w: 只写。已存在文件将被清除 (truncate)。
  • a: 添加。总是添加到文件尾部。
  • b: 二进制模式。
  • r+: 更新文件,可读写,不会截短文件。
  • w+: 更新文件,可读写,清除原有内容。
  • a+: 更新文件,可读写,总是在尾部添加。

文件对象还实现了迭代器协议,可直接循环获取其内容。

>>> with open("main.py", "r") as f:
...     for line in f: print line
...

读方法总能判断不同平台的换行标记,但写方法不会添加任何换行字符,包括 writelines。

>>> with open("test.txt", "w") as f:
...     f.write("a")
...     f.writelines("bc")

>>> cat test.txt
abc

如必须按不同平台写入换行标记,可使用 os.linesep。

>>> os.linesep
'\n'

字符串本身就是序列类型,可以直接用 writelines(str)。readline() 会返回包括换行符在内的整个行数据。通常建议用迭代器或 xreadlines() 代替 readlines(),后者默认一次性读取整个文件。

 

二、读取二进制文件

读取二进制文件使用 'rb' 模式。

这里以图片为例:

with open('test.png', 'rb') as f:
    image_data = f.read()    # image_data 是字节字符串格式的,而不是文本字符串

这里需要注意的是,在读取二进制数据时,返回的数据是字节字符串格式的,而不是文本字符串。一般情况下,我们可能会对它进行编码,比如 base64 编码,可以这样做:

import base64

with open('test.png', 'rb') as f:
    image_data = f.read()
    base64_data = base64.b64encode(image_data)    # 使用 base64 编码
    print base64_data

下面是执行结果的一部分:

iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAACGFjVEw

三、写入二进制文件

写入二进制文件使用 'wb' 模式。

以图片为例:

with open('test.png', 'rb') as f:
    image_data = f.read()

with open('/Users/ethan/test2.png', 'wb') as f:
    f.write(image_data)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值