分类: Python/Ruby
2010-06-27 12:59:50
并构建了新的I/O系统.之前python发布版都缺少一些重要但是出色的函数,比如类似于流的seek(). 类似于流的对象 是一些具有read()和write()方法的类似于文件的对象--比如,socket或文件.python 3具有很多针对于类似于流的对象的I/O层--一个原始的I/O层、一个被缓冲的I/O层以及一个文本I/O层--每层均由其自身的ABC及实现定义。
打开一个流还是需要使用内置的open(fileName)函数,但是也可以调用io.open(fileName)。这么做会返回一个缓冲了的文本文件;read()和readline()会返回字符串
打开一个流还是需要使用内置的 open(fileName)
函数,但是也可以调用 io.open(fileName))
。这么做会返回一个缓冲了的文本文件;read()
和 readline()
会返回字符串(请注意,Python 3 内的所有字符串都是 unicode)。您也可以使用 open(fileName, 'b')
打开一个缓冲了的二进制文件。在这种情况下,read()
会返回字节,但 readline()
则不能用。
此内置 open()
函数的构造函数是:
打开一个流还是需要使用内置的 open(fileName)
函数,但是也可以调用 io.open(fileName))
。这么做会返回一个缓冲了的文本文件;read()
和 readline()
会返回字符串(请注意,Python 3 内的所有字符串都是 unicode)。您也可以使用 open(fileName, 'b')
打开一个缓冲了的二进制文件。在这种情况下,read()
会返回字节,但 readline()
则不能用。
此内置 open()
函数的构造函数是:
open(file,mode="r",buffering=None,encoding=None,errors=None,newline=None,closefd=True) |
可能的模式有:
r
:读
w
:打开供写入
a
:打开供追加
b
:二进制模式
t
:文本模式
+
:打开一个磁盘文件供更新
U
:通用换行模式 默认的模式是 rt
,即打开供读取的文本模式。
buffering
关键字参数的期望值是以下三个整数中的一个以决定缓冲策略:
0
:关闭缓冲
1
:行缓冲
> 1
:完全缓冲(默认) 默认的编码方式独立于平台。关闭文件描述符或 closefd
可以是 True 或 False。如果是 False,此文件描述符会在文件关闭后保留。若文件名无法奏效的话,那么 closefd
必须设为 True。
open()
返回的对象取决于您所设置的模式。表 1 给出了返回类型。
模式 |
返回对象 |
---|---|
文本模式 | TextIOWrapper |
二进制 | BufferedReader |
写二进制 | BufferedWriter |
追加二进制 | BufferedWriter |
读/写模式 | BufferedRandom |
请注意:文本模式可以是 w
、 r
、wt
、 rt
等。
清单 3 中所示的例子打开的是一个缓冲了的二进制流以供读取。
>>>import io >>>f = io.open("hashlib.pyo", "rb") # open for reading in binary mode >>>f # f is a BufferedReader object |
BufferedReader
对象可以访问很多有用的方法,比如 isatty
、 peek
、raw
、 readinto
、readline
、 readlines
、seek
、 seekable
、tell
、 writable
、write
和 writelines
。要想查看完整列表,可以在 BufferedReader
对象上运行 dir()
。
示例:
import pickle as p shoplistfile="shoplist.data" shoplist=["apple","mango","carrot"] f=open(shoplistfile,'wb') p.dump(shoplist,f) f.close() del shoplist f=open(shoplistfile,'rb') storedlist=p.load(f) print(storedlist)
输出:
['apple', 'mango', 'carrot']