本系列将从四个部分简单介绍Python对文件系统的操作与支持:

  1. Python内置的 file 对象

  2. Python的os模块对文件、文件系统操作的支持

  3. Python的os.path模块对文件系统操作的支持

  4. Python对文件描述字操作的支持

  5. Python的stat模块

  此外,Python中还有支持临时文件、目录的tempfile模块,支持多个文件操作的fileinput模块,只对文件中部分行进行快速操作的linecache模块,支持常驻内存的 file-like 对象的StringIO和cStringIO(Python 3中替换为io.StringIO和io.BytesIO)模块。以及支持文件、目录间比较的 filecmp 模块等。

  处理文件压缩格式的模块还包括:gzip、bz2、zipfile(使用InfoZip的free zlib库实现,支持跨程序兼容)和zlib(不支持跨程序兼容)等,支持文件打包操作的模块有tarfile等。

一、file对象与open()函数

  file对象是Python内置的数据类型,通过Python内置的open()函数打开文件可以获得一个file对象。

1. open()函数

  open()函数的格式如下:

open(filename, mode='r', bufsize=-1)

  open()返回一个file对象,它是Python内置的file类型的一个实例。

  open()函数各个参数的含义如下:

  • filename:格式:字符串。含义:要打开的文件的路径,可以绝对路径,也可以是相对路径。注意,在Unix和Windows上,都可以使用斜杠“/”作为目录的分隔符。在Windows中,路径分隔符是反斜杠“\”,这与正则表达式中的转义符号相同,因此windows文件路径中需要使用"\\"表示目录,如:'c:\\test\\test.txt',或使用Python中的raw string,如 r'c:\test\test.txt',来表示路径,Linux中则无此要求。
  • mode:格式:字符串。含义:以哪种读写模式打开文件。mode的可选项见下文。
  • bufsize:格式:整型。含义:为文件设置的缓存。bufsize=0时,等价于unbuffer形式,写到文件的内容立即被刷到硬盘;bufsize=1时,表示行缓冲,每一次写入"\n"后,内容就被刷到硬盘。bufsize < 0时,使用系统默认的缓冲大小;bufsize > 1时,使用其作为文件的缓冲大小。

2. 参数mode的取值与含义

  'r' —— 只读模式,要求目标文件必须存在。

  'w' —— 只写模式,如果目标文件已存在,将会截断目标文件并覆盖其内容;如果目标文件不存在,则新建之。

  'a' —— 追加模式,只写打开目标文件,如果目标文件已存在,写入的内容追加到源文件的结尾;如果目标文件不存在,则创建之。

  'r+' —— 读写模式,要求目标文件必须存在,此时写入,并不会截断源文件,而是替换源文件中相应位置的内容。

  'w+' —— 读写模式,如果目标文件已存在,将会截断目标文件并覆盖其内容;如果目标文件不存在,则新建之。

  'a+' —— 追加模式,读写打开目标文件,如果目标文件已存在,写入的内容追加到源文件的结尾;如果目标文件不存在,则创建之。

二进制文件与文本文件

  上面的6中文件打开模式,还可以与'b','t'相结合,组成类似'rb'、'wt'这样的形式,'b'代表二进制模式,'t'代表文本模式。默认情况下,Python以文本模式打开目标文件。

  • Unix平台上,二者没有区别,
  • Windows平台上,如果以文本模式打开文件,当每次遇读到os.linesep (实际上是'\r\n')时,返回'\n',当每次写入"\n"时,实际转换成 os.linesep。

3. 文件的顺序与非顺序访问

  文件本质上是顺序的,想要读取后面的内容,一般就需要先读出前面的内容,同时后面的字节也不会在前面的字节之前被读取。但是文件也支持非顺序的读写方式,file对象记录一个它自己的当前位置,下一次的读写将从这个位置开始。通过f.tell()函数可以查看当前的位置,通过f.seek()函数则可以设置文件当前的位置。

二、file对象的属性、方法

f.closed

只读属性,判断f.close()是否已经调用过。

f.encoding

只读属性,文件的encoding格式

f.mode

只读属性,显示调用open()打开文件时指定的mode

f.name

只读属性,显示调用open()文件时的指定名称

f.newlines
f.softspace

只读的布尔属性,供print语句记录自己的状态,file对象自身并不修改或使用该属性。

f.errors
f.close()

关闭已经打开的file对象,所有的file对象,完成读写操作后,都应该关闭

f.flush()

手动将Python写到文件的缓存刷到操作系统

f.isatty()

如果 f 是一个交互终端,则返回True,否则,返回False

f.fileno()

返回一个整数,这个整数就是文件 f 的文件描述字——file descriptor,fd。

f.read(size = -1)

读取文件内容,以字符串的形式返回。

size < 0 —— 一直读到文件结尾;

size > 0 —— 读取 size 字节的内容直到文件结尾,如果到了文件末尾仍未满 size 字节,则返回全文。

size = 0 —— size = 0 或读取时当前文件的位置在文末,都会返回一个空字符串。

f.readline(size = -1)

读取1行,直到遇见'\n'或读满size字节,以字符串的形式返回。

size >= 0,读取的内容不超过size字节,如果没有读够 size 字节就到本行结尾,则停止读取,返回本行。

size < 0,读取当前一行的全部内容,直到遇到 '\n' 或文件结尾。

f.readlines(size = -1)

读取多行,返回一个list,每一行作为 list 中的一个字符串。最后一个字符串可能不以 “ \n ”结尾。

f.next()

file对象是可迭代的,每次迭代返回文件中的一行。

f.seek(pos, how = 0)

将当前文件的位置设置到距离参考点pos字节的位置,参数 how 决定参照点的位置:

how = 0,参照点是文件开头,这是默认情形,对应于 os.SEEK_SET

how = 1,参考点是当前位置,对应于os.SEEK_CUR

how = 2,参考点是文末,对应于os.SEEK_END

f.tell()

返回文件当前位置距离文件开头的字节数。

f.truncate([size])

将文件截断到不超过 size 字节,

如果size超过当前文件大小,将以0填充,

如果没有提供size参数,则使用 f.tell() 作为截断后新文件的大小。

f.write(s)

将字符串 s 写入到文件中

f.writelines(lst)

参数lst是一个可迭代对象,将其中的字符串内容全部写到 f 中,该函数不会自动添加 '\n' !

可迭代的file对象  

  前面已经提到,file对象是可迭代的,

for line in f:
...

  会依次遍历 f 中的每一行。

file-like对象与多态

  Python中存在file-like对象这个概念,意思是具有file对象部分属性与功能的对象,file-like对象需要实现哪些方法取决于调用它们的client-code,比如它们是只读的,那就可以只实现file对象的读操作,如read()函数等,file-like是只实现file对象功能的某个子集的对象。

(原创)Python文件与文件系统系列(1)—— file 对象的更多相关文章

  1. (原创)Python文件与文件系统系列(4)——文件描述字操作

    文件描述字(file descriptor,fd)是系统中用来唯一记录当前已经打开的文件的标识号,fd是一个整数. 除了file对象外,Python还提供对fd的操作,对fd的操作更加底层,fd和Py ...

  2. (原创)Python文件与文件系统系列(3)——os.path模块

    os.path 模块实现了一些操作路径名字符串的函数,可以通过 import os.path 使用该模块,不过即使仅仅 import os 也可以使用该模块的方法. 1. abspath(path) ...

  3. (原创)Python文件与文件系统系列(5)——stat模块

    stat模块中定义了许多的常量和函数,可以帮助解释 os.stat().os.fstat().os.lstat()等函数返回的 st_result 类型的对象. 通常使用 os.path.is*() ...

  4. (原创)Python文件与文件系统系列(2)——os模块对文件、文件系统操作的支持

    os模块的功能主要包括文件系统部分和进程管理部分,这里介绍其中与文件系统相关的部分. 当请求操作系统执行操作失败时,os模块抛出内置异常 exceptions.OSError 的实例,可以通过 os. ...

  5. Python 读写文件和file对象(转)

    1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt ...

  6. Python基础篇【第2篇】: Python文件操作

    Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...

  7. 22_java之File对象

    01IO技术概述 * A:IO技术概述 * a: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 * b: Input * 把持久设备上的数据读取到内存中的这 ...

  8. 21_java之File对象和递归遍历

    01IO技术概述 * A:IO技术概述 * a: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 * b: Input * 把持久设备上的数据读取到内存中的这 ...

  9. File对象的常用方法

    File对象不仅可以表示文件,还可以表示目录,源码注释是这么说的:An abstract representation of file and directory pathnames. File类最常 ...

随机推荐

  1. 51Nod1577 异或凑数 线性基 构造

    国际惯例的题面:异或凑出一个数,显然是线性基了.显然我们能把区间[l,r]的数全都扔进一个线性基,然后试着插入w,如果能插入,则说明w不能被这些数线性表出,那么就要输出"NO"了. ...

  2. [CF98E]Help Shrek and Donkey(纳什均衡)

    https://www.cnblogs.com/MashiroSky/p/6576398.html #include<cstdio> #include<algorithm> # ...

  3. 洛谷.4180.[模板]次小生成树Tree(Kruskal LCA 倍增)

    题目链接 构建完MST后,枚举非树边(u,v,w),在树上u->v的路径中找一条权值最大的边(权为maxn),替换掉它 这样在 w=maxn 时显然不能满足严格次小.但是这个w可以替换掉树上严格 ...

  4. 洛谷.3690.[模板]Link Cut Tree(动态树)

    题目链接 LCT(良心总结) #include <cstdio> #include <cctype> #include <algorithm> #define gc ...

  5. godaddy如何联系客服帮助的技巧和方法

    众所周知,Godaddy是世界最大的域名商和空间商,很多人喜欢在那里买域名或者空间,可是,当我们的域名空间出了问题要怎么办呢?今天闪电博客就给大家介绍一些Godaddy客服联系技巧,减少大家等待的时间 ...

  6. ESXI 迁移至KVM (V2V迁移)

    1.1.1 ESXI将虚拟机导出 导出ova模板 将导出的ova模板导入到KVM环境中. 1.1.2 配置KVM环境 详情参考:http://www.cnblogs.com/clsn/p/836625 ...

  7. loopback文件系统

    回环设备(loop-back devices) 实验环境 centos7.2 回环设备( 'loopback device')允许用户以一个普通磁盘文件虚拟一个块设备.(磁盘文件 --> 块设备 ...

  8. Spark机器学习(1):线性回归算法

    线性回归算法,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法. 1. 梯度下降法 线性回归可以使用最小二乘法,但是速度比较慢,因此一般使用梯度下降法(Grad ...

  9. SpringCloud服务如何在Eureka安全优雅的下线

    如果直接KILL SpringCloud的服务,因为Eureka采用心跳的机制来上下线服务,会导致服务消费者调用此已经kill的服务提供者然后出错,处理这种情况有2中方案. 如需平滑的发布服务请参考: ...

  10. Redis相关技巧

    一. 内存占用过大,设置内存最大上限. vi /etc/redis.conf maxmemory 1g maxmemory-policy allkeys-lru (慎用) appendonly yes ...