一:文件对象

文件对象不仅可以用来访问普通的磁盘文件, 而且也可以访问任何其它类型抽象层面上的"文件". 一旦设置了合适的"钩子", 你就可以访问具有文件类型接口的其它对象, 就好像访问的是普通文件一样。

二:内建函数

1:打开

open() 内建函数成功打开文件后时候会返回一个文件对象, 否则引发一个 IOError 异常。open()的基本语法是:

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

file_name 是要打开的文件名字, 它可以是相对路径或者绝对路径。

可选变量access_mode也是一个字符串, 代表文件打开的模式. 通常, 文件使用模式 'r', 'w', 或是 'a'模式来打开, 分别代表读取, 写入和追加。还有个 'U' 模式, 代表通用换行符支持。

使用 'r'或 'U' 模式打开的文件必须是已经存在的. 使用 'w' 模式打开的文件若存在则首先清空。以 'a' 模式打开的文件是为追加数据作准备的, 即使seek 到了其它的地方,所有写入的数据也会追加到文件的末尾。‘w’和‘a’模式,如果文件不存在, 将被自动创建。

其他fopen支持的模式,open也可以支持,比如'b',但是对于所有 POSIX 兼容的Unix 系统(包括Linux)来说, 'b'是可由可无的。

如果没有给定 access_mode , 它将自动采用默认值'r'。下表总结了文件的打开模式:

r

以读方式打开,文件必须存在

rU 或 U

以读方式打开, 同时提供通用换行符支持 (PEP 278),文件必须存在

w

以写方式打开,文件存在则清空,不存在则创建。

a

以追加模式打开,文件不存在则创建。不可读;即使用seek指定了文件指针,也会添加在末尾。

r+

以读写模式打开,文件必须存在

w+

以读写模式打开 (参见 w )

a+

以读写模式打开 (参见 a )

rb

以二进制读模式打开

wb

以二进制写模式打开 (参见 w )

ab

以二进制追加模式打开 (参见 a )

rb+

以二进制读写模式打开 (参见 r+ )

wb+

以二进制读写模式打开 (参见 w+ )

ab+

以二进制读写模式打开 (参见 a+ )

可选参数buffering 用于指示访问文件所采用的缓冲方式. 其中0 表示不缓冲, 1表示行缓冲, 任何其它大于 1 的值代表使用给定值作为缓冲区大小。不提供该参数或者给定负值代表使用系统默认缓冲机制,一般情况下使用系统默认方式即可。

file()和open()函数具有相同的功能, 可以任意替换。任何使用 open() 的地方, 都可以使用 file() 替换它。一般说来, 建议使用 open() 来读写文件。

2:通用换行符支持

不同平台的行结束符号是不同的, 例如 \n, \r, 或者 \r\n . 所以,Python需要用相同的方式处理所有文件。这就是 UNS 的关键所在。

当使用'U' 标志打开文件的时候, 所有的行分割符(或行结束符),无论它原来是什么,通过 Python 的输入方法(read*()函数)返回时,都会被替换为换行符NEWLINE(\n)。这个特性还支持包含不同类型行结束符的文件。

文件对象的newlines属性会记录它曾“看到的”文件的行结束符。如果文件刚被打开, 程序还没有遇到行结束符, 那么文件的newlines为 None .在第一行被读取后, 它被设置为第一行的结束符. 如果遇到其它类型的行结束符, 文件的newlines会成为一个包含每种格式的元组。

注意UNS只用于读取文本文件. 没有对应的处理文件输出的方法。在编译Python 的时候,UNS 默认是打开的。

3:输入

read()方法直接读取字节到字符串中, 最多读取给定数目个字节。如果没有给定 size参数(默认值为 -1)或者 size 值为负,文件将被读取直至末尾。未来的某个版本可能会删除此方法。

readline()方法读取打开文件的一行(读取下个行结束符之前的所有字节).然后包括行结束符的整行,作为字符串返回。和 read() 相同, 它也有一个可选的 size 参数, 默认为 -1, 代表读至行结束符。如果提供了该参数, 那么在超过size个字节后会返回不完整的行。

readlines()会读取所有(剩余的)行,然后把它们作为一个字符串列表返回。它的可选参数 sizhint 代表返回的最大字节大小。如果它大于 0 , 那么返回的所有行应该大约有 sizhint 字节,可能稍微大于这个数字, 因为需要凑齐缓冲区大小。

read、readline、readlines三个方法,在读到末尾的时候,会返回空字符串或者空列表。

4:输出

write()内建方法功能与 read() 和 readline() 相反. 它把含有文本数据或二进制数据块的字符串写入到文件中去。

和 readlines()一样,writelines()方法是针对列表的操作, 它接受一个字符串列表作为参数, 将它们写入文件。注意,行结束符并不会被自动加入, 所以如果需要的话, 你必须在调用writelines()前给每行结尾加上行结束符。

注意,当使用输入方法如 read() 或者 readlines() 从文件中读取行时, Python 并不会删除行结束符。

类似地, 输出方法write() 或 writelines() 也不会自动加入行结束符. 应该在向文件写入数据前自己完成。

5:文件定位

file.seek(offset[, whence])

seek()方法(类似 C 中的 fseek() 函数)可以在文件中移动文件指针到不同的位置. offset字节代表相对于某个位置偏移量。

whence的默认值为 0(os.SEEK_SET), 代表从文件开头算起(即绝对偏移量);1(os.SEEK_CUR)代表从当前位置算起;2(os.SEEK_END) 代表从文件末尾算起。

tell() 方法是对 seek() 的补充; 它告诉你当前文件指针在文件中的位置。从文件起始算起,单位为字节。

三:文件迭代

一行一行访问文件很简单,使用下面的方法:

for eachLine in f:
......

在这个循环里, eachLine代表文本文件的一行(包括末尾的行结束符)。

在 Python 2.2 之前,从文件中读取行的最好办法是使用 file.readlines() 来读取所有数据,这样程序员可以尽快释放文件资源.如果不需要这样做, 那么程序员可以调用 file.readline()一次读取一行。

在 Python 2.2 中,引进了迭代器和文件迭代, 这使得一切变得完全不同, 文件对象成为了它们自己的迭代器, 这意味着用户不必调用 read*() 方法就可以在for 循环中迭代文件的每一行。

文件迭代更为高效。

四:其他

close()用来关闭文件。Python垃圾收集机制也会在文件对象的引用计数降至零的时候自动关闭文件。如果不显式地关闭文件, 那么有可能丢失输出缓冲区的数据。

fileno()方法返回打开文件的描述符. 这是一个整数, 可以用在如 os 模块( os.read() )的一些底层操作上。

调用 flush() 方法会直接把内部缓冲区中的数据立刻写入文件, 而不是被动地等待输出缓冲区被写入。

isatty()是一个布尔内建函数, 当文件是一个类 tty 设备时返回True , 否则返回False。

truncate()方法将文件截取到当前文件指针位置或者到给定 size , 以字节为单位。如果没有给定size ,则默认将文件截取到当前位置。

五:文件属性

文件对象还有一些数据属性。例如文件名(file.name ), 文件的打开模式 ( file.mode ), 文件是否已被关闭 ( file.closed)等等。

下表列出了这些属性并做了简短说明:

file.closed

True表示文件已经被关闭, 否则为 False

file.encoding

文件所使用的编码 - 当 Unicode 字符串被写入数据时, 它们将自动使用 file.encoding 转换为字节字符串; 若file.encoding 为 None 时使用系统默认编码

file.mode

文件打开时使用的访问模式

file.name

文件名

file.newlines

未读取到行分隔符时为 None , 只有一种行分隔符时为一个字符串, 当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束符的列表。

file.softspace

为0 表示在输出一数据后,要加上一个空格符,1 表示不加。这个属性一般程序员用不着,由程序内部使用。

六:标准文件

一般说来, 只要程序一执行,就可以访问三个标准文件。它们分别是标准输入,标准输出和标准错误输出。这些文件已经被预先打开了,只要知道它们的文件句柄就可以随时访问这些文件。

这些文件沿用的是 C 语言中的命名, 分别为stdin , stdout和 stderr。

Python 中可以通过 sys 模块来访问这些文件的句柄。导入 sys 模块以后, 就可以使用sys.stdin , sys.stdout 和 sys.stderr 访问。

七:命令行参数

sys模块通过 sys.argv 属性提供了对命令行参数的访问。在C语言中,argc 和 argv 分别代表参数个数和参数向量。

而在Python 中, sys.argv 是命令行参数的列表,len(sys.argv) 是命令行参数的个数(也就是 argc)。

Python还提供了两个模块用来辅助处理命令行参数. 其中一个是 getopt 模块, 它更简单些, 但是不是很精细。而 Python 2.3 引入的 optparse 模块提供了一个更强大的工具,而且它更面向对象。

如果你只是用到一些简单的选项, 推荐 getopt , 但如果需要提供复杂的选项, 那么请参阅 optparse。

八:os模块

对文件系统的访问大多通过 Python 的 os 模块实现. 该模块是Python访问操作系统功能的主要接口. os 模块实际上只是真正加载的模块的前端, 而真正的那个"模块"明显要依赖与具体的操作系统。

这个"真正"的模块可能是以下几种之一: posix (适用于 Unix 操作系统), nt (Win32), mac(旧版本的 MacOS), dos (DOS), os2 (OS/2)等。不需要直接导入这些模块.只要导入 os 模块, Python 会为你选择正确的模块,
从而不需要考虑底层的工作。

比如,不同的操作系统,它们所支持的行分隔符不同。另一个不同是路径分隔符(POSIX 使用 "/", DOS 和 Windows 使用 "\"等)。

如果需要创建跨这三个平台的应用的时候, os 模块设计者已经帮我们想到了这些差异问题.os 模块有五个很有用的属性。它们被列在了下表中:

linesep

用于在文件中分隔行的字符串

sep

用来分隔文件路径名的字符串

pathsep

用于分隔文件路径的字符串

curdir

当前工作目录的字符串名称

pardir

(当前工作目录的)父目录字符串名称

不管你使用的是什么平台, 只要你导入了 os 模块, 这些变量自动会被设置为正确的值。

Python基础:25文件的更多相关文章

  1. 二十五. Python基础(25)--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  2. python基础之文件读写

    python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...

  3. 第二篇:python基础之文件读写

    python基础之文件读写   python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使 ...

  4. 七. Python基础(7)--文件的读写

    七. Python基础(7)--文件的读写 1 ● 文件读取的知识补充 f = open('file', encoding = 'utf-8') content1 = f.read() content ...

  5. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  6. python基础之文件处理

    读和写文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...

  7. Python基础_文件的的处理及异常处理

    今天主要讲讲文件读写及异常处理. 一.文件操作 1.1 文件的创建及读 打开文件 open 函数  open(file,[option]) file 是要打开的文件 option是可选择的参数文件的打 ...

  8. Python基础之文件处理、函数、内置函数 (三)

    内置函数 一 详细见python文档,请点击 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = file('文件路径', '模式') 注:python中打开 ...

  9. 【穿插】Python基础之文件、文件夹的创建,对上一期代码进行优化

    在上一期妹子图的爬虫教程中,我们将图片都保存在了代码当前目录下,这样并不便于浏览,我们应该将同一个模特的图片都放在一个文件夹中. 今天我们就简单讲一下Python下如何创建文件.文件夹,今后就可以用上 ...

  10. Python基础、文件处理

    一.概述 Python中操作文件是通过file对象来处理的,步骤: 指定文件的路径.操作的模式 对文件进行操作,读或写操作 关闭文件对象 f = open( '文件路径','访问模式') # 打开文件 ...

随机推荐

  1. Eclipse 遇到的问题和快捷键记录

    一.the user operation is waiting: 选择菜单栏的"Project",然后把菜单栏中"Build Automatically"前面的 ...

  2. windows 下nginx配置ssl https支持

    本文适合正式上线的配置,购买来的证书 私钥*.key文件需要先去掉密码 openssl rsa -in old.key -out new.key

  3. java.lang.UnsupportedClassVersionError: com/gargoylesoftware/htmlunit/WebClient : Unsupported major.minor version 52.0 (unable to load class com.gargoylesoftware.htmlunit.WebClient)

    java.lang.UnsupportedClassVersionError: com/gargoylesoftware/htmlunit/WebClient : Unsupported major. ...

  4. 关于springmvc 只能在index.jsp页面显示图片的处理办法jsp页面无法显示图片

    首先,已经配置好了mvc对静态资源的处理 只有index,jsp可以显示图片 其他页面同样的代码则不显示 后来折腾了半天,发现 index是static的父目录的级别文件 可以向下访问 但是其他的js ...

  5. web前端学习(三)css学习笔记部分(10)-- 初级开发工程师面试题

    html所有基础.h5的所有基础.CSS所有常用的布局.CSS3新增的属性等等内容 附一个课程上用到的链接(转载): http://www.zhufengpeixun.cn/JavaScriptmia ...

  6. windows中将网络共享文件夹映射为网络硬盘

    目的是: 实现局域网,不同电脑之间共享文件. 例如: 计划将A电脑 的文件夹C:\MM ,共享给局域网电脑 B. 局域网所有电脑都可访问: 1. 在A电脑中 共享文件夹..选择‘启用网络发现’   ‘ ...

  7. 集合-Map 接口

    1. 概述   java.util.Map <K,V>接口是一个顶层接口,里面存放的数据单元是:单对元素: K 表示 描述的键 的类型,Key 的类型: V 表示 描述的值 的类型,Val ...

  8. CSS3圆环旋转效果

    html结构: <div class="demo"></div> css结构: .demo{ width:250px; height:250px; bord ...

  9. JavaScript--clientX,clientY、pageX,pageY、offsetLeft,offsetTop/offsetWidth,offsetHeight、scrollLeft,scrollTop/scrollWidth,scrollHeight、clientHeight,clientWidth区别

    /*在事件的内部console.dir(event)*/ /** * 事件对象event * clientX/clientY 获取鼠标基于浏览器窗口(可视区域的坐标位置)全兼容 * * pageX/p ...

  10. 跨域知识(二)——JSONP

    JSONP是服务器与客户端跨源通信的常用方法.最大特点就是简单适用,老式浏览器全部支持,服务器改造非常小. 它的基本思想是,网页通过添加一个<script>元素,向服务器请求JSON数据, ...