1、文件对象
- 普通的磁盘文件。
- 其他类型抽象层面上的“文件”。
- 具有文件类型接口的其他对象(类文件(file like)对象)。
内建函数open()返回一个文件对象。
还有大量的函数也会返回文件对象或是类文件对象。
2、文件内建函数
(1)open()函数
提供初始化输入/输出(I/O)操作的通用接口。
成功打开文件返回文件对象,否则引发错误,产生IOError异常。
file_object = open(file_name,access_mode='r',buffering=-1)
file_name代表要打开的文件的名字,可以是相对路径或者绝对路径;
access_mode代表文件的打开模式,默认采用’r’,完整取值:
- ‘r’:读取已经存在的文件
- ‘w’:写入,文件存在先清空再创建,不存在则创建
- ‘a’:追加数据到文件的末尾,若文件不存在则创建
- ‘rU’或’U’:以读方式打开,同时提供通用换行符支持。
- ‘b’:二进制模式访问,所有POSIX兼容的Unix系统(含Linux),’b’可有可无,因为这些系统中所有文件都被当成二进制文件。加上’b’对于将程序移植到非Unix环境是有好处的,但是’b’不能作为第一个字符出现。
- ‘rb’:以二进制读模式打开。
- ‘wb’:以二进制写模式打开。
- ‘ab’:以二进制追加模式打开。
- ‘+’:可读可写
- ‘r+’:以读写模式打开。
- ‘w+’:以读写模式打开。
- ‘a+’:以读写模式打开。
- ‘rb+’:以二进制读写模式打开。
- ‘wb+’:以二进制读写模式打开。
- ‘ab+’:以二进制读写模式打开。
buffering代表访问文件所采用的缓冲方式,取值:
- 0:不缓冲
- 1:只缓冲一行数据
- >1:使用给定值作为缓冲区大小
- 不给定或者使用负数,表示采用系统默认缓冲机制,即对任何类电报机(tty)设备使用行缓冲,其他设备使用正常缓冲。
(2)工厂函数file()
open()与file()可以任意替换。
(3)通用换行符支持(UNS)(2.3)
当你使用’U’标志打开文件的时候,所有的行分隔符(或行结束符)通过Python的输入方法(例如read*())返回时都会被替换为换行符NEWLINE( \n)。这个特性还支持包含不同类型行结束符的文件。文件对象的newlines属性会记录它曾“看到的”文件的行结束符。UNS只用于读取文本文件,没有对应的处理文件输出的方法。
3、文件内建函数
(1)输入
- read()方法直接读取字节到字符串中,最多读取给定数目个字节。 若没有给定size参数(默认为-1)或size为负值,文件将读到末尾。
- readline()读取一行,包括行结束符。size默认为-1,代表读至行结束符。否则在超过size个字节后会返回不完整的行。
- readlines()返回字符串列表。可选参数sizhint代表返回的最大字节大小。若大于0,那么返回的所有行应该大约有sizhint字节。
- xreadlines对象(2.1),在xreadlines模块中,该对象类型可以用来高效地迭代文件的行。调用file.xreadlines()等价于xreadlines.xreadlines(file)。xreadlines不是一次性读取所有的行,而是每次读取一块,所以用在for循环时可以减少对内存的占用。2.3中的迭代器和文件迭代的引入,没必要使用xreadlines()方法,因为它和iter(file)及for eachLine in file效果一样。
- readinto()已废弃。buffer()已废弃。读取给定数目的字节到一个可写的缓冲区对象。
(2)输出
- write()将含有文本数据或二进制数据块的字符串写入到文件中去。
- writelines()接受一个字符串列表写入文件。行结束符不会自动加入,必须在调用writelines()前给每行结尾加上行结束符。
(3)文件内移动
- seek(off,whence=0)方法在文件中移动文件指针到不同的位置。
offset字节代表相对于某个位置(由whence指定)偏移量。默认位置值为0,代表从文件开头算起(即绝对偏移量),1代表从当前位置开始,2代表从文件末尾算起。
- tell()方法它告诉你当前文件指针在文件中位置,从文件起始算起,单位为字节。
(4)文件迭代
for eachLine i n f:
:
eachLine表示文本文件的一行(包括末尾的行结束符)。
2.2前,最好使用file.readlines()来读取所有数据,后使用file.xreadlines()来作为最高效读取文件的方法。2.2中引入的迭代器和文件迭代使文件迭代更高效。file.next()方法返回文件的下一行,或在没有其他行时引发StopIteration异常。
(5)其他
- close()关闭文件。Python垃圾收集机制也会在文件对象的引用计数降到0时自动关闭。良好的编程习惯要求在重新赋给另一个文件对象前关闭这个文件。不显式关闭文件,可能会丢失输出缓冲区的数据。
- fileno()返回打开文件的描述符。返回一个整型。 flush()方法直接把内部缓冲区中的数据立刻写入文件。
- isatty()当文件是类tty设备返回True,否则返回False。
- truncate()方法将文件截取到当前文件指针位置或者到给定size,以字节为单位。
(6)文件方法杂项
①行分隔符
- POSIX(Unix系列或Mac OS X)系统,行分隔符是换行符NEWLINE(\n)字符。
- 旧的Mac OS下是RETURN(\r)
- 而DOS和Wind32使用(\r\n)。
②路径分隔符
- POSIX使用“/”;
- DOS和Windows使用“\”;
- 旧版本Mac OS使用“:”。
③有助于跨平台开发的os模块属性
- linesep 用于在文件中分隔行的字符串
- sep 用于分隔文件路径名的字符串
- pathsep 用于分隔文件路径的字符串
- curdir 当前工作目录的字符串名称
- pardir (当前工作目录的)父目录字符串名称
④其他补充
print语句默认在输出内容末尾加上一个换行符,在语句后加一个逗号就可以避免这个行为。
readline()和readlines()不对行里空字符做任何处理,所以使用print时有必要加上逗号,若省略逗号,显示出的文本每行后会有两个换行符。
4、文件内建属性
- file.closed 文件已经被关闭标志位
- file.encoding 文件所使用的编码
- file.mode 文件打开时使用的访问模式
- file.name 文件名
- file.newlines 行分隔符列表
- file.softspace 0表示在输出一数据后,加上一个空格符;1表示不加(程序员一般用不着,程序内部使用)
5、标准文件
程序执行后,可以访问3个标准文件。
- 标准输入(一般是键盘)
- 标准输出(到显示器的缓冲输出)
- 标准错误(到屏幕的非缓冲输出)
“缓冲”和“非缓冲”指open()函数的第三个参数。
这些文件分别为stdin,stdout,stderr。
这些文件预先会被打开,通过sys模块可以访问到这些文件的句柄。
print语句通常是输出到sys.stdout;而内建函数raw_input()通常从sys.stdin 接收输入。
6、命令行参数
sys模块通过sys.argv属性提供了对命令行参数的访问。
- sys.argv命令行参数的列表,该列表的第一项永远是程序的名称。
- len(sys.argv)命令行参数的个数(即C语言的argc)
“管道”实现一个程序的输出到下个程序输入的转换。
Python提供了模块getopt(简单)及optparse(复杂)来辅助处理命令行参数。
7、文件系统
大多通过os模块访问文件系统。该模块是Python访问操作系统功能的主要接口。
os模块实际上只是真正加载的模块的前端,那些真正的模块可能是:posix,nt(win32),mac(旧版本的Mac OS),dos(DOS),OS2(OS/2)等等。
os模块负责大部分文件系统操作,包括删除/重命名文件,遍历目录树,以及管理文件访问权限等。os模块还负责对进程和进程运行环境进行管理。
另外,os.path模块可以完成一些针对路径名的操作。可以完成管理和操作文件路径的各个部分,获取文件或子目录信息,文件路径查询等。
os模块与os.path模块提供了与平台和操作系统无关的统一的文件系统访问方法。
(1)os模块的文件/目录访问函数
- mkfifo()/mknod() 创建命名管道/创建文件系统节点
- remove()/unlink() 删除文件
- rename()/renames() 重命名文件
- *stat() 返回文件信息
- symlink() 创建符号链接
- utime() 更新时间戳
- tmpfile() 创建并打开(’w+b’)一个新的临时文件
- walk() 生成一个目录树下的所有文件名
- chdir()/fchdir() 改变当前工作目录/通过一个文件描述符改变当前工作目录
- chroot() 改变当前进程的根目录
- listdir() 列出指定目录的文件
- getcwd()/getcwdu() 返回当前工作目录/功能相同,但返回一个Unicode对象
- mkdir()/makedirs() 创建目录/创建多层目录
- rmdir()/removedirs() 删除目录/删除多层目录
- access() 检验权限模式
- chmod() 改变权限模式
- chown()/lchown() 改变owner和group ID/功能相同,但不会跟踪链接
- umask() 设置默认权限模式
- open() 底层的操作系统open(对于文件,使用标准的内建open()函数)
- read()/write() 根据文件描述符读取/写入数据
- dup()/dup2() 复制文件描述符/功能相同,但是是复制到另一个文件描述符
- makedev() 从major和minor设备号创建一个原始设备号
- major()/minor() 从原始设备号获得major/minor设备号
(2)os.path模块中的路径名访问函数
- basename() 去掉目录路径,返回文件名
- dirname() 去掉文件名,返回目录路径
- join() 将分离的各部分组合成一个路径名
- split() 返回(dirname(),basename())元组
- splitdrive() 返回(drivename,pathname)元组
- splitext() 返回(filename,extension)元组
- getatime() 返回最近访问时间
- getctime() 返回文件创建时间
- getmtime() 返回最近修改时间
- getsize() 返回文件大小(以字节为单位)
- exists() 指定路径(文件或目录)是否存在
- isabs() 指定路径是否为绝对路径
- isdir() 指定路径是否存在且为一个目录
- isfile() 指定路径是否存在且为一个文件
- islink() 指定路径是否存在且为一个符号链接
- ismount() 指定路径是否存在且为一个挂载点
- samefile() 两个路径名是否指向同一个文件
8、永久存储模块
pickle和marshal模块用来转换并储存Python对象。数据的扁平化,数据的序列化或者数据的顺序化。
另一些模块(dbhash/bsddb,dbm,gdbm,dumbdbm等)及它们的“管理器”(anydbm)只提供了Python字符串的永久性储存。最后一个模块(shelve)则两者兼有。db系列模块使用DBM格式写入数据。这些模块为用户的对象提供了一个命名空间,这些对象同时具备字典对象和文件对象的特点。不足之处在于只能储存字符串,不能对Python对象进行序列化。
9、相关模块
- base64 提供二进制字符串和文本字符串间的编码/解码操作
- binascii 提供二进制和ASCII编码的二进制字符串间的编码/解码操作
- bz2 访问BZ2格式的压缩文件
- csv 访问csv文件
- filecmp 用于比较目录和文件
- fileinput 提供多个文本文件的行迭代器
- getopt/optparse 提供了命令行参数的解析/处理
- glob/fnmatch 提供Unix样式的通配符匹配的功能
- gzip/zlib 读写GNU zip(gzip)文件(压缩需要zlib模块)
- shutil 提供高级文件访问功能
- c/StringIO 对字符串对象提供类文件接口
- tarfile 读写TAR归档文件,支持压缩文件
- tempfile 创建一个临时文件(名)
- uu uu格式的编码和解码
- zipfile 用于读取ZIP归档文件的工具