[Python] io 模块之 open() 方法
io.open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True)
打开file对象并返回对应的数据流。如果打开失败,则抛出IOError异常。
file要么是一个指向需要被打开文件的路径字符串,或者是文件描述符序号。
mode是一个可选字符串,用来指明打开文件的模式。默认为'r',意思是可读文本模式。另一个常见的参数值是'w',表示写入(如果文件存在,则首先清空文件内容。)。'a'表示追加,在某些Unix系统中表示无论当前处于文本什么位置,所以内容都要追加到文件末尾。在文本模式中,如果没有指明编码,则默认使用操作系统的编码。(对于原始字节的读写使用二进制模式,而不在乎编码是否指定。)以下是可用的模式:
| 字符 | 含义 |
| 'r' | 只读模式(默认) |
| 'w' | 清空原文件,写入模式。 |
| 'a' | 写入模式,如果文件存在 则追加到文件末尾。 |
| 'b' | 二进制模式。 |
| 't' | 文本模式(默认) |
| '+' | 打开磁盘文件进行更新(读写) |
| 'U' | 通用新行模式(只为向后兼容,不推荐再使用。) |
默认的模式是'rt'(文本可读)。对于二进制访问,'w+b'模式会打开并清空文件,而'r+b'只打开文件而不清空。
Python区分文件的打开方式是二进制还是文本,哪怕底层的操作系统不区分它们。用二进制模式(即在mode参数中包含'b')打开的文件会以字节对象返回,不进行任何解码。在文本模式(缺省情况或者是mode参数中包含't')下,字节会首先被按照指定的编码方式进行解码,如果没有给出指定的编码方式,则使用操作系统默认的编码方式。
buffering是一个可选的整数,用来设置buffering策略。0表示关闭buffering(只在二进制模式下),1表示选择行进行缓冲(buffering)(仅限于文本模式),大于1的整数表示选择固定大小的块进行缓冲。如果没有给定buffering参数,默认的缓冲策略如下:
- 二进制文件按照固定大小的块进行缓冲;Python首先试图确定底层设备的block size,然后赋给DEFAULT_BUFFER_SIZE。在许多系统中,缓冲大小一般是4096或者8192个字节。
- 交互式文本文件(isatty()返回True的文件)使用行缓冲。其他文本文件使用跟二进制文件一样的策略。
encoding是编码名称,用以编码或者解码文件。这只在文本模式中使用。默认的编码方式是系统的编码方式(即locale.getpreferredencoding()返回值),任何Python支持的编码都可以充当该参数。查看codec模块了解所有被支持的编码。
errors是一个可选字符串,用以指明如何处理编码或解码异常,该参数在二进制模式不可用。传入'strict'用以在编码异常发生时抛出ValueError异常,或者使用'ignore'忽略异常。(注意:忽略编码异常可能导致数据丢失。)'replace'表示遇见不规则数据时插入一个替换符(例如?)代替它。'xmlcharrefreplace'表示使用合适的XML字符参考进行替换,'backslashreplace'表示使用反斜杠代替。任何注册到codecs.register_error()中的异常处理名称都是有效的。
newline表示如何使用通用新行来标识一个新行。它可能是None,'','\n','\r'以及'\r\n'。它的工作方式如下:
- 在输入时,如果newline是None,通用新行模式打开。输入的新行可以'\n', '\r'或 '\r\n'结尾,它们在被返回给调用者之前都将被转义成'\n'。如果它是'',新行模式打开,新行将被原样返回给调用者。如果新行中包含任何有效字符,该行只会以给定的字符来确定该行结束。
- 在输出时,如果newline是None,'\n'将是默认的行分隔符(即os.linesep)。如果新行是'',则不会进行转义。如果新行包含任何有效字符,'\n'字符串将转义成给定字符串。
如果closefd为False,并且给定的是文件描述符而不是文件名,当文件关闭的时候,底层的文件描述符仍然保持开启。如果给定了文件名,则closefd无效而且必须是True(默认就是True)。
open()函数返回的文件对象取决于模式。当使用文本模式打开文件时,它返回一个TextIOBase的子类。当使用二进制打开时,返回的是BufferedIOBase的子类。准确细分为:可读二进制模式,返回BufferReader对象;在可写和追加模式中,返回BufferWriter对象,在读写模式中,返回BufferRandom。当buffering关闭时,原始数据流,一个RawIOBase的子类将被返回。
还可以使用unicode或者字节字符串当作一个文件来进行读写。对于unicode字符串,将像文本一样使用StringIO对其进行处理,而二进制则使用BytesIO。
[Python] io 模块之 open() 方法的更多相关文章
- python io 模块之 open() 方法(好久没写博客了)
io.open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True),打开file ...
- 查看python中模块的所有方法
查看python中模块的所有方法 安装的python模块,现将查看方法总结如下 一.CMD命令行下使用pydoc命令 在命令行下运行$ pydoc modules即可查看 二.在python交 ...
- python解析模块(ConfigParser)使用方法
python解析模块(ConfigParser)使用方法 很多软件都有配置文件,今天介绍一下python ConfigParser模块解析配置文件的使用方法 测试配置文件test.conf内容如下: ...
- 转-Python optionParser模块的使用方法
Python 有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功 ...
- python常见模块属性与方法
sys模块的变量 变量 描述 sys.path 模块搜索路径 path[0] 是当前脚本程序的路径名,否则为 '' sys.modules 已加载模块的字典 sys.version 版本信息字符串 s ...
- 【python测试开发栈】帮你总结python random模块高频使用方法
随机数据在平时写python脚本时会经常被用到,比如随机生成0和1来控制逻辑.或者从列表中随机选择一个元素(其实抽奖程序也类似,就是从公司所有人中随机选择中奖用户)等等.这篇文章,就帮大家整理在pyt ...
- linux-导入python自定义模块的使用方法
#!/usr/bin/python # -*- coding:utf -8 -*- import os import sys sys.path.append("/h/s/compare_f& ...
- python urllib模块中的方法
1.urllib.urlopen(url[,data[,proxies]]) 打开一个url的方法,返回一个文件对象,然后可以进行类似文件对象的操作.本例试着打开google >>> ...
- python 查看模块中的方法
way 1.help() way 2.dir() # dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表: way 3. 使用inspect模块, inspect.getmembe ...
随机推荐
- Sword protobuf学习三
#include <iostream> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> ...
- PinnedListView分析一
分享一个Android控件,PinnedHeaderListView , 大致是像图钉一样,能够固定显示一个头部在ListView的顶部,类似于Android原版通讯录中联系人按照字母分组排列, 这个 ...
- linux文件经 windows系统 之后出现 权限缺失 的解决方法
把Linux下的文件拷贝到windows,再拷贝到Linux时,文件的权限丢失. 解决办法: 把文件压缩后,将压缩文件拷贝到windows系统上,再拷贝压缩文件到linux服务器,在目标linux服务 ...
- checkbox批量删除功能
参考:http://www.jb51.net/article/35338.htm 感谢作者 代码片段:jsp <c:forEach items="${infolist }" ...
- MBR:主引导记录:
下面内容严重参考:百度百科: Main Boot Record)是位于磁盘最前边的一段引导(Loader)代码.它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别.分区引导信息的定位,它由磁 ...
- unity5x --------Music Mixer参数详解
我们一直在致力开发出业界最顶尖水准音频处理功能,而经过很长一段时间的努力,在Unity5.0中,音频处理功能将成为非常重点的一个功能. 要达成这个目标,我们首先重写了很多Unity中音频相关得处理 ...
- System.web和System.WebServer
System.WebServer是因为iis7而出现的,也就是说如果在Classic下会被忽略,而System.web是iis以前版本的配置. httpModules modules
- 数据源HikariCP(多数据库的配置项)
oracle.jdbc.type=oracle oracle.jdbc.driver=oracle.jdbc.OracleDriver oracle.jdbc.url=jdbc:oracle:thin ...
- Android应用坐标系统全面具体解释
1 背景 去年有非常多人私信告诉我让说说自己定义控件,事实上通观网络上的非常多博客都在讲各种自己定义控件,可是大多数都是授之以鱼.却非常少有较为系统性授之于渔的文章,同一时候由于自己也迟迟没有时间规划 ...
- 基于PHP采集数据入库程序(二)
在上篇基于PHP采集数据入库程序(一) 中提到采集新闻信息页的列表数据,接下来讲讲关于采集新闻具体内容 这是上篇博客的最终数据表截图: 接下来要做的操作就是从数据库中读取所需要采集的URL,进行页面抓 ...