- 文件对象不仅可以访问普通磁盘文件,也可以访问任何其他抽象层面上的文件(类文件对象,如URL)
- 文件只是连续的字节序列,数据的传输经常会用到字节流,字节流可能是由单个字节或大块数据组成
open()
函数提供初始化I/O操作的通用接口,成功会返回一个文件对象(句柄),否则报错open(fname, mode[rwabU], buffering[num])
mode
参数中的U
: 换行符支持,所有的行分隔符通过Python的输入方法返回时都会被替换为换行符NEWLINE(\n)
,支持包含不同类型行结束符的文件
file()
是工厂函数,与open()
同,常在判断对象类型时用:instance(obj, file)
- 文件内建属性:
closed
encoding
mode
name
newlines
softspaces
- 文件对象常用方法:
- 全读
read(size)
,读单行readline(size)
,读取并返列表readlines(sizhint)
,xreadlines()
:每次读一块,,用for
时减少占用,效果同iter(file)
- 写入
write()
,写入字符串列表writelines()
- 移动文件指针
seek(num,[012])
,当前文件指针位置tell()
(如想读取两次同文件内容,read后移动指针到0再read) - 关闭文件
close()
,虽然有垃圾回收机制,但不显式地关闭文件可能丢失输出缓存区的数据 - 返回打开文件的描述符(用于底层操作)
fileno()
- 手动把内部缓存区中的数据写入文件
flush()
- 截取
truncate()
,到当前文件指针位置,以字节为单位
- 全读
os.path.expanduser()
中,传入'~'
作为参数,返回绝对路径os
模块中关于分隔符属性:sep
(路径名分隔符)linesep
(行分隔符)pathsep
(路径分隔符)curdir
(当前目录)pardir
(当前父目录)- 行分隔符
\n
的长度是1 - 不同系统分隔符差异:
-
系统 行分隔符 路径分隔符 POSIX(Unix/Mac) \n (NEWLINE) / 旧Mac: \r (RETURN) : DOS/Win: \r\n \
-
- 一般程序执行就可以访问三个标准文件:标准输入(
raw_input
的接收源)、标准输出(pinrt
的输出源)、标准错误,即这些文件已被打开,知道句柄就可访问
python中可通过sys
模块来访问句柄sys.stdin/stdout/stderr
sys.argv
为命令行参数的列表,argv[0]
一直是程序的名称- 辅助处理命令行参数的模块: 简易使用
getopt
,复杂多用optparse
os
模块中文件系统主要函数:
mkfifo()/mknod() remove()/unlink() rename()/renames() 文件信息*stat()
symlink() utime() tmpfile() 生成目录下文件名walk()
chdir()/fchdir() chroot() listdir() getcwd()/getcwdu()
mkdir()/makedirs() rmdir/removedirs() 查权限access() chmod()
chown()/lchown() umask() open()/read()/write()复制文件描述符dup/dup2
创建原始设备号makedev() 获取设备号major/minor()
os.path
中文件系统常用函数:
basename() dirname() join() split() geta/c/mtime()
exsits() isabs() isdir() isfile() samefile()
- 永久存储模块(对象持久化): 可以把用户的数据归档保存起来供以后使用,是介于磁盘文件系统和RDBMS之间的一个利器
marshal
和pickle
模块: 将比基本类型复杂的对象转换为一个二进制数据集合,可实现数据的扁平化(序列化、顺序化)DMB
系模块: 提供python字符串的永久性储存,用传统的DBM格式写入数据(自动择优anydbm
,dbhash/bsddb
,dbm
,gdbm
,功能最少dumbdbm
)shelve
结合了两者的转换和存储(cPickle
+anydbm
),允许并发读,但不能共享读/写访问
marshal
和pickle
的区别:marshal
只能处理简单的python对象,pickle
可以处理递归对象(cPickle
是它的增强版)DBM
系模块为对象提供一个命名空间,并具备字典和文件对象的特点,但只能储存字符串,不能对python对象进行序列化- 文件I/O相关模块:
base64(二进制和字符串) binascii(二进制和ASCII) bz2(类似gzip) csv filemap(比较目录/文件)
fileinput(多个文本的迭代器) getopt/optparse(args的处理) glob/fnmatch(Unix通配符匹配)
gzip/zlib(解/压gzip文件) shutil(高级文件访问) c/StringIO(字符串类接口)
tarfile(读写TAR归档文件) tempfile(创建临时文件) zipfile(读取ZIP文件) uu(uu格式的解/编码)
- 一些python类文件对象:
socket
对象(socket
模块): 用于网络和文件popen*()
文件对象(os
和popen2
模块): 管道连接fopen()
(os
模块): 底层文件访问- 由URL建立到指定web服务器的网络连接(
urllib
模块)
getopt
模块: 搭配sys.argv
使用,getopt
函数返回两个对象:opts
和args
opts
为分析出的格式信息,它是一个两元组的列表,每个元素为:(选项串,附加参数)
,如果没有附加参数则为空串
args
为不属于格式信息的剩余的命令行参数
温故知新,高级复读机