Python文件和输入输出

作者:最西瓜
来源:《Core Python Programming, Second Edition》CH9. Files and Input/Output

文件对象

文件对象不仅仅可以用来访问磁盘文件,还可以是别的数据的文件抽象,如:网络数据。这样做的原因在于输入/输出数据结构倾向于使用一个通用的接口,提供一致的接口和实现。在 Unix 操作系统中认为一切都是文件。请记住,文件不过是连续字节的数据,不管它是网络的、磁盘的、设备的。

open() 和 file()

两个函数都用于打开文件,open() 函数当打开成功时返回文件对象,失败时抛出 IOError 异常。函数原型如下:

file_object = open(file_name, access_mode='r', buffering=-1)

其中 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() 是否为相同文件

Leave a Reply

Your email address will not be published. Required fields are marked *