Python文件和输入输出
Contents
Python文件和输入输出
作者:最西瓜 来源:《Core Python Programming, Second Edition》CH9. Files and Input/Output
文件对象
文件对象不仅仅可以用来访问磁盘文件,还可以是别的数据的文件抽象,如:网络数据。这样做的原因在于输入/输出数据结构倾向于使用一个通用的接口,提供一致的接口和实现。在 Unix 操作系统中认为一切都是文件。请记住,文件不过是连续字节的数据,不管它是网络的、磁盘的、设备的。
open() 和 file()
两个函数都用于打开文件,open() 函数当打开成功时返回文件对象,失败时抛出 IOError 异常。函数原型如下:
|
|
其中 file_name 可以是文件的绝对或者相对路径。access_mode
必须是 r(读)w(写)a(追加) +(读写)b(二进制)的组合,组合如下:[rwa][b][+]
其中后两个部分是可选的。同时还支持 U(通用换行符)模式,通用换行符的意思就是不管文件本身是什么换行符,最终读取出来的一定是 \n 换行符,该模式只能与读模式组合。
工厂函数 file() 具有与 open() 相同的功能,我们一般在读写文件时用 open() 而在需要对象时用 file()
文件对象方法
- file.read([size]) 方法用于从文件中直接读取字节,最多读取 size 个字节数据,如果不指定则读取全部。
- file.readline([size]) 方法则用于从文件中读取一行,在行的长度大于 size 时只读取 size 长度的不完整行。
- file.readlines([sizehint]) 读取文件的行并返回一个字符串列表,别忘了最重要的方式,用 for 循环直接迭代文件,文件对象是它自己的迭代器。
- file.write([str]) 用于将字符串写入到文件中
- file.writelines([seq]) 用于写入多行,要注意的是换行符是不会自动添加的。
- file.seek(offset[, whence]) 跟 C 语言中的 fseek() 很相似,offset 可以是正负数表示偏移量,whence 表示相对的位置,值必须是
os.SEEK_SET
os.SEEK_CUR
os.SEEK_END
中的一个。 - file.tell() 方法获得当前所在的位置。位置是以字节进行测量的。
- file.close() 可以关闭文件,或者当文件的引用为 0 时自动关闭。
- file.fileno() 获得文件对象的文件描述符,可供 os.read() 使用。
- file.flush() 可以将缓冲中的数据刷新到磁盘上。
- file.isatty() 用于判别文件是否是 tty 设备。
- file.truncate([size]) 将文件截取到当前位置,如果提供 size 参数,则截取到 size 大小。
文件属性
- file.closed 文件是否关闭
- file.encoding 文件的编码,如果没有则为系统默认编码
- file.mode 访问文件的模式字符串
- file.name 文件名字
- file.newlines 当没有开始读取文件时为 None ,随着读取把不同的换行符添加到元组中
文件多系统属性
- os.linesep 当前操作系统的换行符
- os.sep 路径分割符,在 Unix 下为 / 在 Windows 下为 \
- os.pathsep 多个路径分割符,在 Unix 下为 : 在 Windows 下为 ;
- os.curdir 当前工作目录字符串
- os.pardi 工作目录的上级目录字符串
标准文件和命令行参数
系统自带三个标准文件:sys.stdin \ sys.stdout \ sys.stderr ,分别表示标准输入、标准输出和标准误。命令行参数通过 sys.argv 传递,第一个参数是脚本文件名本身。len(sys.argv) 是参数的长度。用模块 getopt 和 argparse 来解析命令行参数。
文件操作
- os.mkfifo() / os.mknod() 创建命名管道或者文件系统节点
- os.remove() / os.unlink() 删除文件
- os.rename() 重命名文件
- os.symlink() 创建软链接
- os.utime() 设置文件的访问和更新时间
- os.tmpfile() 创建临时文件
- os.chdir() 改变工作目录
- os.chroot() 改变当前进程的根目录
- os.listdir() 返回目录中的文件列表
- os.getcwd() 返回当前工作目录
- os.mkdir() 创建目录,在目录存在的情况下会报错
- os.rmdir() 移除目录
- os.access() 测试访问权限
- os.chmod() 改变访问权限
- os.chown() 改变所有者和组ID
- os.umask() 设置默认的访问权限,当创建文件时自动设置
- os.open() / os.read() / os.wirte() 底层操作系统操作文件,均以文件描述符作为句柄
os.path 模块函数
- os.path.basename() 移除路径中的前部,只返回文件名
- os.path.dirname() 返回路径中的前部,移除文件名
- os.path.join() 将分离的路径用 os.sep 拼接起来
- os.path.split() 将路径分割成目录和文件名两部分
- os.path.splitdrive() 返回驱动名和剩余路径两部分
- os.path.splitext() 返回文件名和扩展名两部分
- os.path.getatime() 返回访问时间
- os.path.getctime() 返回创建时间
- os.path.getmtime() 返回最后修改时间
- os.path.getsize() 返回文件大小(字节)
- os.path.exists() 文件是否存在
- os.path.isabs() 是否是绝对路径
- os.path.isdir() 是否是目录
- os.path.isfile() 是否为文件
- os.path.islink() 是否为软链接
- os.path.ismount() 是否为挂载点
- os.path.samefile() 是否为相同文件
Author zoro.wang
LastMod 2017-09-15