Differences between revisions 1 and 16 (spanning 15 versions)
Revision 1 as of 2004-09-19 22:05:29
Size: 990
Editor: 61
Comment:
Revision 16 as of 2004-09-20 01:15:42
Size: 3834
Editor: 61
Comment:
Deletions are marked like this. Additions are marked like this.
Line 8: Line 8:
-- 61.182.251.99 [[[DateTime(2004-09-19T22:05:29Z)]]] -- v_gyc@yahoo.com [[[DateTime(2004-09-19T22:05:29Z)]]]
Line 12: Line 12:
Line 14: Line 15:
== 问题 Problem == == 问题 ==
Line 26: Line 27:
更好的方法是将文件对象和一个变量绑定,可以及时关闭文件。比如,读取文本文件内容 更好的方法是将文件对象和一个变量绑定,可以及时关闭文件。比如,读取文本文件内容
Line 29: Line 30:
file_object = open('thefile.txt') file_object = open('thefile.txt')              # 打开文件
Line 31: Line 32:
file_object.close( ) #使用完毕,关闭文件 file_object.close( ) # 使用完毕,关闭文件
Line 34: Line 35:
... 将文本文件的全部内容按照分行 作为一个tuple读出有4种方法:
Line 36: Line 38:
#!python list_of_all_the_lines = file_object.readlines( ) # 方法 1
list_of_all_the_lines = file_object.read( ).splitlines(1) # 方法 2
list_of_all_the_lines = file_object.read().splitlines( ) # 方法 3
list_of_all_the_lines = file_object.read( ).split('\n') # 方法 4
}}}
Line 38: Line 44:
方法1、2 返回的list中包含的string 元素末尾有'\n',
方法3、4 返回的list中包含的string元素末尾去掉了‘\n’.

方法1是效率最高的,而且最符合python的风格。

在Python 2.2以及更高版本中,有方法5和方法1等效
{{{
list_of_all_the_lines = list(file_object) # 方法 5
Line 39: Line 53:
== 讨论 Discussion ==
Line 41: Line 54:
... == 讨论 ==

如果文件大小不是特别大,那么一次将文件内容全部读出是最快的,一般来说对于以后文件内容的处理也是最方便的。

内置函数 '''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版本中由于拥有更先进的垃圾回收机制可能延缓Python中的自动关闭文件功能时,自己关闭文件也是有效的。 ...

文章来自《Python cookbook》.

翻译仅仅是为了个人学习,其它商业版权纠纷与此无关!

-- [email protected] [DateTime(2004-09-19T22:05:29Z)] TableOfContents

描述

读取文件内容

Credit: Luther Blissett

问题

从文件读取文本或数据

解决

一次将文件内容读入一个长字符串的最简便方法

all_the_text = open('thefile.txt').read(  )    # 文本文件的全部文本
all_the_data = open('abinfile', 'rb').read(  ) # 2进制文件的全部数据

更好的方法是将文件对象和一个变量绑定,可以及时关闭文件。比如,读取文本文件内容:

file_object = open('thefile.txt')              # 打开文件
all_the_text = file_object.read(  )            # 文本文件的全部文本
file_object.close(  )                          # 使用完毕,关闭文件

将文本文件的全部内容按照分行 作为一个tuple读出有4种方法:

list_of_all_the_lines = file_object.readlines(  )             # 方法 1
list_of_all_the_lines = file_object.read(  ).splitlines(1)    # 方法 2
list_of_all_the_lines = file_object.read().splitlines(  )     # 方法 3 
list_of_all_the_lines = file_object.read(  ).split('\n')      # 方法 4 

方法1、2 返回的list中包含的string 元素末尾有'\n', 方法3、4 返回的list中包含的string元素末尾去掉了‘\n’.

方法1是效率最高的,而且最符合python的风格。

在Python 2.2以及更高版本中,有方法5和方法1等效

list_of_all_the_lines = list(file_object)                     # 方法 5 

讨论

如果文件大小不是特别大,那么一次将文件内容全部读出是最快的,一般来说对于以后文件内容的处理也是最方便的。

内置函数 open,打开文件并返回一个文件对象实例。 可以调用read方法读取文件内容(文本或2进制)到一个大字符串。

如果是文本内容,可以使用stringsplit方法或者特别的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版本中由于拥有更先进的垃圾回收机制可能延缓Python中的自动关闭文件功能时,自己关闭文件也是有效的。 ...

参考 See Also

PyCkBk-4-2 (last edited 2009-12-25 07:16:21 by localhost)