欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python文件和输入输出

程序员文章站 2024-03-12 16:12:26
...

Python 核心编程[第九章]

0x00文件对象

文件只是连续的字节序列,数据的传输经常会用到字节流,无论字节流是由单个字节还是大块数据组成。

一、文件内建函数

  • open() 内建函数成功打开文件后会返回一个文件对象,否则引发一个错误。当操作失败时 Python 会产生一个 IOError 异常。

  • open()的基本语法:
    file_object = open(file_name,access_mode = ‘r’,buffering = -1)

  • access_mode (‘r’(默认),w,a,U,+,b)

  • buffering(缓冲 0,1,n)

1.通用换行符支持(UNS)

  不同平台的结束符表示方式不同:当用 ‘U’ 标志打开文件时,所有行分隔符通过 python 都会被替换为 \n

二、文件内建方法

文件方法可分为四类:输入、输出、文件内移动、杂项操作

1.输入
  • 方法 read():返回字符,size读入个数,默认 -1 表示至文件末尾
  • 方法 readline():返回字符串,返回包括行结束符,size
  • 方法 readlines():返回读取行的字符串列表,sizhint表示返回最大字节大小
2.输出
  • write()
  • writelines()
  • 没有 writeline() 方法,因为它等价于使用以行结束符结尾的单行字符串调用 - write() 方法
  • 注:当输入方法选取 read 或 readlines 从文件中读取时,行结束符并不会被删除,write writelines 方法也不会自动加入行结束符
3.文件内移动
  • seek() 可以将文件指针移动到不同位置,offset 代表对于某个位置的偏移量。whence 从哪个位置开始偏移,默认为0,代表从文件开头算起,1 代表从当前位置算起,2 代表从文件末尾算起
  • text() 方法是对 seek() 的补充,它告诉你当前文件指针在文件中的位置,以字节为单位
4.文件迭代
for eachLine in f:
	;
##也可以使用迭代器的 next() 方法。
5.其他
  • close() 通过关闭文件来结束对它的访问。如果不显式的关闭可能丢失缓冲区的数据
  • flush() 直接把内部缓冲区中的数据立刻写入文件,而不是等待输出缓冲区被写入
  • isatty() 是一个布尔内建函数,当文件是一个类 tty 设备时返回 True ,否则返回False
  • truncate() 将文件截取到当前指针位置或指定 size ,以字节为单位
6.文件方法杂项
```
##读取文件高效
fname = input(" file name ")
f = open('fname','r')
for eLine in f:
print(eLine,end='')
f.close()
```
  • 注:换行符的差异 \n ( POSIX) \r (旧 Mac OS) \r\n (DOS Wind32),路径分割符 / (POSIX) \ (DOS Wind32) : (旧 Mac OS)

Python文件和输入输出

  • tell() 告诉当前位置(从1开始计数)
  • raw_input() 不会保留用户输入的换行符
  • 文件对象的方法:表9.3

三、文件内建属性

  属性保存了文件对象相关的附加数据,例如:文件名(file.name),文件打开模式(file.mode),文件是否已被关闭(file.closed),标记变量(file.softspace)决定使用 print 语句打印下一行前是否加入一个空白字符,使用编码(file.encoding),flie.newlines。

0x02文件系统

  对文件系统的访问大多通过 Python 的 os 模块实现。该模块是 Python 访问操作系统功能的主要接口。os 模块实际上只是真正加载的模块的前端,而真正的那个“模块”显然要以来具体的操作系统。这个“真正”的模块可能是一下几种之一:posix, nt(win32), mac, dos7, os2 等。只要导入 os 模块,Python会正确选择模块。 除了对进程和进程运行环境进行管理外,os 模块还负责处理大部分的文件系统操作,这些功能包括删除/重命名文件,遍历目录树,管理文件访问权限。 os.path 可以完成一些针对路径名的操作。它提供的函数可以完成管理和造作文件路径名中的各个部分,获取文件或子目录信息,文件路径查询等操作。

表9.5 os 模块的文件/目录访问函数

文件处理

  • mkfifo() / mknod():创建命名管道 / 创建文件系统节点
  • remove() / unlink():删除文件
  • rename() / renames():重命名文件
  • *stat():返回文件信息
  • symlink():创建符号链接
  • utime():更新时间戳
  • tempfile():创建并打开(‘w+b’)一个新的临时文件
  • walk():生成一个目录树下的所有文件名

目录/文件夹

  • chdir() / fchdir():改变当前工作目录 / 通过一个文件描述符改变当前工作目录
  • chroot():该百年当前进程的根目录
  • listdir():列出指定目录的文件
  • getcwd() / getcwdu():返回当前工作目录 / 功能相同,但返回一个 Unicode 对象
  • mkdir() /makedirs():创建目录 / 创建多层目录
  • rmdie() / removedirs():删除目录 / 删除多层目录

访问/权限

  • access():检验权限模式
  • chmod():改变权限模式
  • chown() / lchown():改变 owner 和 group ID/ 功能相同,但不会跟踪链接
  • umask():这只默认权限

文件描述符操作

  • open():底层的操作系统 open
  • read() / write():根据文件描述符读取/写入数据
  • dup() /dup2():复制文件描述符/功能相同,但是是复制到另一个文件描述符

设备号

  • makedev():从 major 和 minor 设备号创建一个原始设备号
  • major() / minor():从原始设备号获取 major / minor 设备号

表9.6 os.path 模块中的路径访问函数

分隔

  • basename():去掉目录路径,返回文件名
  • dirname():去掉文件名,返回目录路径
  • join():将分离的各部分分组组合成一个路径名
  • split():返回(dirname(),basename())元组
  • splitdrive():返回(dirvename,pathname)元组
  • splitext():返回(filename,extension)元组

信息

  • getatime():返回最近访问时间
  • getctime():返回文件创建时间
  • getmtime():返回最近文件修改时间
  • getsize():返回文件大小

查询

  • exists():指定路径(文件、目录)是否存在
  • isabs():指定路径是否为绝对路径
  • isdir():指定路径是否存在且为一个目录
  • isfile():指定路径是否存在且为一个文件
  • islink():指定路径是否存在且为一个符号链接
  • ismount():指定路径是否存在且为一个挂载点
  • samefile():两个路径名是否指向同一文件

  • 使用见例 9.1

0x03 文件的相关知识

一、文件执行

  需要涉及其他位置的其他文件,甚至启动另外的 Python 解释器,了解如何启动其他程序,以及与他们进行通信,或者是 Python 执行环境的一般信息,去看第十四章。

二、标准文件

   标准输入 stdin(一般是键盘)、标准输出 stdout(显示器的缓冲区输出)、标准错误 stderr(屏幕的非缓冲区输出)(这里说的‘缓冲区’和‘非缓冲区’是指 open 的第三个参数)。只要你的程序一执行就可以访问这三个标准文件,这些文件已经被预先打开了,只要知道他们的文件句柄就可以随时访问这些文件。
  可以通过 sys 模块访问 sys.stdin … print 通常输出到 sys.stdout input() 通常从 sys.stdin接收,sys.*是文件,所以你必须自己处理好换行符。

三、命令行参数

  sys 模块通过 sys.argv 属性提供了对命令行参数的访问。Python 中 argc 其实就是 argv 列表的长度,而该列表的第一项 argv[0] 永远是程序名。
  Python 提供了两个模块 getopt(简单),optparse(强大,更面向对象)用来辅助处理命令行参数

四、持久存储

  可以把用户的数据归档保存起来供以后使用,大部分永久性存储模块是用来存储字符串数据,但是也有方法来归档的 Python 对象。

1.pickle 和 marshal 模块

  pickle 和 marshal 可以用来转换并存储 Python 对象。该过程将比较基本复杂的对象转换为一个二进制数据机和,这样就可以把数据集合好存起来或通过网络发送,然后再重新把数据集合恢复为原来的对象格式。这个过程也被称为数据的扁平化、数据的序列化或数据的顺序化。
这些模块本身并没有提供“永久性存储”的功能,因为他们没有为对象提供名称空间,也没有提供永久性存储对象的并发写入访问。他们只能存储转换 Python 对象,为保存和传输提供方便。marshal 只处理简单的 Python 对象,而 pickle 还可以处理递归对象,被不同地方多次引用对象,以及用户定义的类和对象。

2.DBM 风格模块

  只提供了 Python 字符串的永久性存储。 anydbm模块,它会自动检测系统上已经安装的 DBM兼容模块,并选择“最好”的一个。它们只能存储字符串,不能对 Python 对象进行序列化。

3.shelve 模块

  上述两个功能都具备。shelve 模块使用 anydbm 模块寻找合适的 DBM模块,然后使用 cPickle 来完成对存储转换过程。shelve 模块允许对数据库文件进行并发的访问,但不允许共享读/写访问。 pick 模块中的两个主要函数是 dump() 和 load()。dump()函数接收一个文件句柄和一个数据对象作为参数,把数据对象以特定格式保存到给定文件里。当我们使用 load() 函数从文件中取出已保存的对象时,pickle 知道如何恢复这些对象到他们本来的格式。 建议看一下 pickle 和 shelve 模块。

0x03相关模块

  • 表9.7
  • base64:提供二进制字符串和文本字符串见的编码/解码操作
  • binascii:提供二进制文件和 ascii 编码的二进制字符串间的编码/解码操作
  • bz2:访问 BZ2 格式的压缩文件
  • csv:访问 csv 文件
  • filecmp:用于比较目录和文件
  • fileput:提供多个文本文件的行迭代器,模块遍历一组输入文件,每次读取它们内容的一行,如果没有明确给定文件名,则默认从命令行读取文件
  • getopt / optparse:提供了命令行参数解析/处理
  • glob / fnmatch:提供 Unix 央视的通配符匹配功能,提供了Unix shell 样式文件名的通配符,如(*),(?)
  • gzip / zlib:读写 GNU zip文件(压缩需要 zlib 模块)
  • shutil:提供高级文件访问功能,包括复制文件、复制文件的访问权限、递归地目录树复制
  • c / StringIO:对字符串对象提供类文件接口,见字符串一章,这个接口包括文件对象的所有标准方法
  • tarfile:读写 TAR 归档文件,支持压缩文件
  • tempfile:创建一个临时文件(名)
  • uu:uu 格式编码和解码
  • zipfile:用于读取 ZIP 归档文件的工具
    Python文件和输入输出
相关标签: 语言 # Python