在pythony 3.0.1已经废弃了file类,移除了cPickle模块,可以使用pickle模块代替.
并构建了新的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 给出了返回类型。
表 1. 针对不同打开模式的返回类型
模式 |
返回对象 |
---|---|
文本模式 | TextIOWrapper |
二进制 | BufferedReader |
写二进制 | BufferedWriter |
追加二进制 | BufferedWriter |
读/写模式 | BufferedRandom |
请注意:文本模式可以是 w
、 r
、wt
、 rt
等。
清单 3 中所示的例子打开的是一个缓冲了的二进制流以供读取。
清单 3. 打开一个缓冲了的二进制流以供读取
>>>import io >>>f = io.open("hashlib.pyo", "rb") # open for reading in binary mode >>>f # f is a BufferedReader object <io.BufferedReader object at 0xb7c2534c> >>>f.close() # close stream |
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']