Size: 3909
Comment:
|
← Revision 32 as of 2009-12-25 07:16:21 ⇥
Size: 5395
Comment: converted to 1.6 markup
|
Deletions are marked like this. | Additions are marked like this. |
Line 8: | Line 8: |
-- v_gyc@yahoo.com [[[DateTime(2004-09-19T22:05:29Z)]]] [[TableOfContents]] |
-- v_gyc [<<DateTime(2004-09-19T22:05:29Z)>>] <<TableOfContents>> |
Line 23: | Line 23: |
#!python | |
Line 30: | Line 31: |
#!python | |
Line 35: | Line 37: |
将文本文件的全部内容按照分行 作为一个tuple读出有4种方法: | 将文本文件的全部内容按照分行 作为一个list读出有4种方法: |
Line 38: | Line 40: |
#!python | |
Line 51: | Line 54: |
#!python | |
Line 67: | Line 71: |
Line 75: | Line 77: |
因此, 打开2进制文件不需要这种自动替换时,必须通知Python: open打开文件时第2个参数使用'''rb'''。 |
因此, 打开2进制文件不需要这种自动替换时,必须通知Python: open打开文件时第2个参数使用'''rb'''。 |
Line 81: | Line 82: |
You can call methods such as read directly on the file object produced by the open function, as shown in the first snippet of the solution. When you do this, as soon as the reading operation finishes, you no longer have a reference to the file object. In practice, Python notices the lack of a reference at once and immediately closes the file. However, it is better to bind a name to the result of open, so that you can call close yourself explicitly when you are done with the file. This ensures that the file stays open for as short a time as possible, even on platforms such as Jython and hypothetical future versions of Python on which more advanced garbage-collection mechanisms might delay the automatic closing that Python performs. ... |
你可以直接在'''open'''函数获得的文件对象上调用文件的方法比如read(象第一个程序片断中). 当方法调用结束时,你不再拥有被打开文件对象的引用。 实际上,Python 检测到这个文件对象没有被'''引用''', 会马上关闭这个文件对象。 然而,更佳的做法是持有一个open返回的文件对象的引用, 这样当结束处理文件时, 可以自己'''显式关闭'''文件。 这可以保证文件被打开的时间尽可能的短, 即使在Jython和以后的Python版本中由于拥有更先进的垃圾回收机制可能延缓自动关闭文件功能时, 自己关闭文件也是有效的。 |
Line 84: | Line 84: |
== 参考 See Also == | 如果不是需要读取全部文件内容, 而是每次读取文件的'''部分内容''', 习惯方法是不同的。 下面的程序片断显示了如何从文件中每次读取100字节,一直到文件末尾: {{{ #!python file_object = open('abinfile', 'rb') while 1: chunk = file_object.read(100) if not chunk: break do_something_with(chunk) file_object.close( ) }}} read方法中使用参数N, 保证read只返回N字节(如果接近文件末尾,可能更少)。 当到达文件末尾时,read返回一个 '''空'''字符串. 每次读取文件的一行是个常见任务。在Python2.2以及更高版本中最简单、最明了、最快的方法如下: {{{ #!python for line in open('thefile.txt'): do_something_with(line) }}} 在Python早期版本中有多种方法一次读取一行。即使在特别古老的Python版本如1.5.2中也可以保证运行的方法同2进制文件块读取操作很接近,代码如下: {{{ #!python file_object = open('thefile.txt') while 1: line = file_object.readline( ) if not line: break do_something_with(line) file_object.close( ) }}} '''readline''' 同 '''read''' 一样, 在文件末尾返回空字符串。注意文件末尾和空行很容易区分,'''readline'''对于空行返回''''\n''''. ''''\n''''不是空字符串,而是长度为1的字符串。 == 参考 == 食谱 4.3; [ http://wiki.woodpecker.org.cn/moin.cgi/PyCkBk_2d4_2d3#preview] Python 文档 内置函数 '''open''' 和 file 对象部分 |
文章来自《Python cookbook》. 翻译仅仅是为了个人学习,其它商业版权纠纷与此无关!
-- v_gyc [2004-09-19 22:05:29]
描述
读取文件内容
Credit: Luther Blissett
问题
从文件读取文本或数据
解决
一次将文件内容读入一个长字符串的最简便方法
更好的方法是将文件对象和一个变量绑定,可以及时关闭文件。比如,读取文本文件内容:
将文本文件的全部内容按照分行 作为一个list读出有4种方法:
方法1、2 返回的list中包含的string 元素末尾有'\n', 方法3、4 返回的list中包含的string元素末尾去掉了‘\n’.
方法1是效率最高的,而且最符合python的风格。
在Python 2.2以及更高版本中,有方法5和方法1等效
1 list_of_all_the_lines = list(file_object) # 方法 5
讨论
如果文件大小不是特别大,那么一次将文件内容全部读出是最快的,一般来说对于以后文件内容的处理也是最方便的。
内置函数 open,打开文件并返回一个文件对象实例。 可以调用read方法读取文件内容(文本或2进制)到一个大字符串。
如果是文本内容,可以使用string的split方法或者特别的splitlines方法将此string分解成文本行的list。
经常进行文件内容按行分解,可以直接调用文件对象的readlines方法,更方便更快捷。:)。
在Python 2.2以及更高版本中,可以直接将文件对象实例作为内置list函数的唯一参数。
在Unix 以及类Unix系统,比如Linux和BSD的各种变体中,文本文件和2进制文件没有实质的区别。
在Windows和Macintosh系统中,文本文件中的分行符不是标准的'\n'分隔符,分别是'\r\n'和'\r'。
打开文本文件时,Python会自动用'\n'替换相应的分隔符。
因此, 打开2进制文件不需要这种自动替换时,必须通知Python: open打开文件时第2个参数使用rb。
在类Unix平台上使用rb参数也没有什么坏处。 虽然不是必须的,但是区分文本文件和2进制文件是一个好习惯,可以使程序易于理解,同时具有较好的跨平台性。
你可以直接在open函数获得的文件对象上调用文件的方法比如read(象第一个程序片断中). 当方法调用结束时,你不再拥有被打开文件对象的引用。 实际上,Python 检测到这个文件对象没有被引用, 会马上关闭这个文件对象。 然而,更佳的做法是持有一个open返回的文件对象的引用, 这样当结束处理文件时, 可以自己显式关闭文件。 这可以保证文件被打开的时间尽可能的短, 即使在Jython和以后的Python版本中由于拥有更先进的垃圾回收机制可能延缓自动关闭文件功能时, 自己关闭文件也是有效的。
如果不是需要读取全部文件内容, 而是每次读取文件的部分内容, 习惯方法是不同的。
下面的程序片断显示了如何从文件中每次读取100字节,一直到文件末尾:
read方法中使用参数N, 保证read只返回N字节(如果接近文件末尾,可能更少)。 当到达文件末尾时,read返回一个 空字符串.
每次读取文件的一行是个常见任务。在Python2.2以及更高版本中最简单、最明了、最快的方法如下:
在Python早期版本中有多种方法一次读取一行。即使在特别古老的Python版本如1.5.2中也可以保证运行的方法同2进制文件块读取操作很接近,代码如下:
readline 同 read 一样, 在文件末尾返回空字符串。注意文件末尾和空行很容易区分,readline对于空行返回'\n'. '\n'不是空字符串,而是长度为1的字符串。
参考
食谱 4.3; [ http://wiki.woodpecker.org.cn/moin.cgi/PyCkBk_2d4_2d3#preview]
Python 文档 内置函数 open 和 file 对象部分