Differences between revisions 6 and 7
Revision 6 as of 2007-07-30 14:35:28
Size: 5284
Editor: XiaoQi
Comment:
Revision 7 as of 2007-07-30 14:39:47
Size: 6680
Editor: XiaoQi
Comment:
Deletions are marked like this. Additions are marked like this.
Line 26: Line 26:
 1. `e10.6, (1)`:……source 是某种类型的字符串;它可能是一个 URL(例如 'http://slashdot.org/slashdot.rdf'),一个本地文件的完整或者部分路径名(例如 'binary.xml'),或者是一个包含了'''需要解析''' <!> XML 数据的字符串。'''待解析'''
 1. e10.6, (2)`:''This is actually elegant '''in the sense that,''' if urllib ever supports new types of URLs in the future, you will also support them without recoding.''[[BR]]
 1. `e10.6, (1)`:……source 是某种类型的字符串;它可能是一个 URL(例如 'http://slashdot.org/slashdot.rdf' ),一个本地文件的完整或者部分路径名(例如 'binary.xml'),或者是一个包含了'''需要解析''' <!> XML 数据的字符串。'''待解析'''
 1. `e10.6, (2)`:''This is actually elegant '''in the sense that,''' if urllib ever supports new types of URLs in the future, you will also support them without recoding.''[[BR]]
Line 29: Line 29:
 1. `e10.6, (3)`:再一次,你不用做任何特别的事来检查 source 是否是一个有效的文件名('''总之'''在不同的平台上,判断文件名有效性的规则变化很大,'''那么'''不管怎样做都可能会判断错)。[[BR]]
 (./) 再一次,你不用做任何特别的事来检查 source 是否是一个有效的文件名(在不同的平台上,判断文件名有效性的规则变化很大,'''因此'''不管怎样做都可能会判断错)。
 1. `e10.6, (4)`:到这里,你需要假设 source 是一个其中有硬编码数据的字符串(因为'''没有'''什么可以判断的了),所以你可以使用 StringIO 从中创建一个类文件对象并将它返回。(实际上,由于使用了 str 函数,所以 source 没有必要一定是字符串;它可以是任何对象,你可以使用它的字符串表示形式,'''通过它的定义的''' `__str__` '''特殊方法'''。)
 (./) 到这里,你需要假设 source 是一个其中有硬编码数据的字符串(因为没有'''别的'''可以判断的了),所以你可以使用 StringIO 从中创建一个类文件对象并将它返回。(实际上,由于使用了 str 函数,所以 source 没有必要一定是字符串;它可以是任何对象,你可以使用它的字符串表示形式,'''只要定义了它的''' `__str__` '''专用方法'''。)

7-29<X10>kpg.xml 脚本和流

TableOfContents

  1. “接收……作为参数”一律改为“接受……作为参数”
  2. 本章标题Scrips 和 Streams (./) 脚本和流

抽象输入源

  1. Para 1:Python 的最强大力量之一是它的动态绑定,并且动态绑定最强大的用法之一是类文件(file-like)对象。BR (./) Python 的最强大力量之一是它的动态绑定,动态绑定最强大的用法之一是类文件(file-like)对象。

  2. 例10.1上, Para -2:只要你将一个类文件对象传递给函数,函数只是调用对象的 read 方法,函数可以处理任何类型的输入源,而不需要处理每种类型的特定代码BR (./) 只要你将一个类文件对象传递给函数,函数只是调用对象的 read 方法,就可以处理任何类型的输入源,而不需要为处理每种类型分别编码

  3. 例10.1上, Para -1:你可能纳闷这和 XML 处理有什么关系,…… (./) 你可能纳闷……

  4. e10.1, (3):确保处理完 {X} 文件后调用 close 方法。

  5. e10.2up:哦,所有这些看上去象是在浪费大量的时间。毕竟,你已经看过 minidom.parse 可以只接收文件名,并自动执行所有打开文件和关闭无用文件的行为。不错,如果你知道正要解析的是一个本地文件,你可以传递文件名而且 minidom.parse 可以足够聪明的做正确的事情™,这一切都不会有问题。但是请注意,使用类文件分析直接从Internet上来的 XML 文档是多么相似和容易的事情BR (./) 哦,所有这些看上去像是在浪费大量的时间。毕竟,你已经看到,minidom.parse 可以只接收文件名,并自动执行所有打开文件和关闭无用文件的行为。不错,如果你知道正要解析的是一个本地文件,你可以传递文件名而且 minidom.parse 可以足够聪明地做正确的事情(Do The Right Thing™),这一切都不会有问题。但是请注意,使用类文件,会使分析直接从 Internet 上来的 XML 文档变得多么相似和容易BR (!) 我就纳闷了,怎么“做正确的事情”也成了 trademark。顺便加了个注释 {i} 这是一部著名的电影。——译注

  6. e10.2, (1){i} 前一章中所看到的,……

  7. e10.2, (4)By the way, this URL is real, and it really is XML. It's an XML representation of the current headlines on Slashdot, a technical news and gossip site.BR 顺便提一句,这个 URL 是真实的,它真的是一个 XML。它是Slashdot站点(这是一个技术新闻和随笔站点)上当前标题的 XML 表示。BR (./) 顺便提一句,这个 URL 是真实的,它真的是一个 XML。它是 Slashdot 站点(一个技术新闻和随笔站点)上当前新闻提要的 XML 表示。

  8. e10.3downOK,所以你可以使用 minidom.parse 函数来解析本地文件和远端 URL,但对于解析字符串,你使用……一个不同的函数。BR (./) 好吧,所以你可以使用 minidom.parse 函数来解析本地文件和远端 URL,但对于解析字符串,你使用……另一个函数。

  9. e10.4up:如果有一个方法可以把字符串转换成类文件对象,那么你可以只把 <!> 这个对象传递给 minidom.parse 就可以了。 (./) 只要

  10. e10.4, (1):StringIO 模块只包含了单个 <!> 类,也叫 StringIO,它允许你将一个字符串转换为一个类文件对象。这个 {X} StringIO 类在创建实例的时候接收字符串作为参数。 (./) 一个

  11. e10.4, (4):任何时候,read 都将返回字符串的未读剩余 {X} 部分。

  12. e10.5, (1):……它将调用对象的 read 方法并高兴的开始解析,绝不会知道它的输入源 {X} 自一个硬编码的字符串。

  13. e10.5down:那么现在你知道了如何使用单个 <!> 函数,minidom.parse,来解析一个保存在 web 页面上、本地文件中或硬编码字符串中的 XML 文档。 (./) 同一个

  14. e10.6, (1):……source 是某种类型的字符串;它可能是一个 URL(例如 'http://slashdot.org/slashdot.rdf' ),一个本地文件的完整或者部分路径名(例如 'binary.xml'),或者是一个包含了需要解析 <!> XML 数据的字符串。待解析

  15. e10.6, (2)This is actually elegant in the sense that, if urllib ever supports new types of URLs in the future, you will also support them without recoding.BR 这里通过强制方式进行:尝试把它当作一个 URL 打开并静静地忽略打开非 URL 引起的错误。感觉上 {X} 这样做非常好,因为如果 urllib 将来支持更多的 URL 类型,不用重新编码就可以支持它们。

  16. e10.6, (3):再一次,你不用做任何特别的事来检查 source 是否是一个有效的文件名(总之在不同的平台上,判断文件名有效性的规则变化很大,那么不管怎样做都可能会判断错)。BR (./) 再一次,你不用做任何特别的事来检查 source 是否是一个有效的文件名(在不同的平台上,判断文件名有效性的规则变化很大,因此不管怎样做都可能会判断错)。

  17. e10.6, (4):到这里,你需要假设 source 是一个其中有硬编码数据的字符串(因为没有什么可以判断的了),所以你可以使用 StringIO 从中创建一个类文件对象并将它返回。(实际上,由于使用了 str 函数,所以 source 没有必要一定是字符串;它可以是任何对象,你可以使用它的字符串表示形式,通过它的定义的 __str__ 特殊方法。) (./) 到这里,你需要假设 source 是一个其中有硬编码数据的字符串(因为没有别的可以判断的了),所以你可以使用 StringIO 从中创建一个类文件对象并将它返回。(实际上,由于使用了 str 函数,所以 source 没有必要一定是字符串;它可以是任何对象,你可以使用它的字符串表示形式,只要定义了它的 __str__ 专用方法。)

标准输入、输出和错误

查询缓冲节点

查找节点的直接子节点

根据节点类型创建不同的处理器

处理命令行参数

全部放在一起

小结

DiveIntoPythonZh/2007-07-29 (last edited 2009-12-25 07:16:34 by localhost)