Size: 6857
Comment:
|
Size: 8179
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 36: | Line 36: |
1. `Para 2`:……当你 print 某些东西时,结果前往 stdout 管道;当你的程序崩溃并打印出调试信息('''类似于''' <!> Python 中的 {i} ^traceback(^错误跟踪^)^)的时候,信息前往 stderr 管道。 (./) '''例如''' 1. `e10.8, (1)`:正如 {i} ^在^例 6.9, “简单计数”中看到的,…… 1. `e10.8, (3)`:'''像 stdout''' <!> ,stderr 并不为你添加硬回车;如果需要,要自己加上。 (./) '''和 stdout 一样''' 1. `e10.8down`:……然而,它们仍然是类文件对象,'''并且'''你可以将其它任何'''文件或者类文件对象'''赋值给它们来重定向它们的输出。[[BR]] (./) 然而,它们仍然是类文件对象,'''因此'''你可以将其它任何'''(类)文件对象'''赋值给它们来重定向其输出。 1. `e10.9`:在 Windows 上,你'''可以'''使用 type 来代替 cat 显示文件的内容。[[BR]] (./) 在 Windows 上,你'''要'''使用 type 来代替 cat 显示文件的内容。 1. `e10.9, (4)`:'''将'''所有后续的输出重定向到刚才打开的新文件上。[[BR]] (./) 所有后续的输出'''都会被'''重定向到刚才打开的新文件上。 1. `e10.9, (5)`:这样只会将输出结果“'''printed''' <!> ”到日志文件中;…… (./) '''打印''' |
7-29<X10>kpg.xml 脚本和流
- “接收……作为参数”一律改为“接受……作为参数”
本章标题:Scrips 和 Streams
脚本和流
抽象输入源
Para 1:Python 的最强大力量之一是它的动态绑定,并且动态绑定最强大的用法之一是类文件(file-like)对象。BR
Python 的最强大力量之一是它的动态绑定,而动态绑定最强大的用法之一是类文件(file-like)对象。
例10.1上, Para -2:只要你将一个类文件对象传递给函数,函数只是调用对象的 read 方法,函数可以处理任何类型的输入源,而不需要处理每种类型的特定代码。BR
只要你将一个类文件对象传递给函数,函数只是调用对象的 read 方法,就可以处理任何类型的输入源,而不需要为处理每种类型分别编码。
例10.1上, Para -1:你可能纳闷过这和 XML 处理有什么关系,……
你可能会纳闷,……
e10.1, (3):确保处理完成
文件后调用 close 方法。
e10.2up:哦,所有这些看上去象是在浪费大量的时间。毕竟,你已经看过 minidom.parse 可以只接收文件名,并自动执行所有打开文件和关闭无用文件的行为。不错,如果你知道正要解析的是一个本地文件,你可以传递文件名而且 minidom.parse 可以足够聪明的做正确的事情™,这一切都不会有问题。但是请注意,使用类文件分析直接从Internet上来的 XML 文档是多么相似和容易的事情!BR
哦,所有这些看上去像是在浪费大量的时间。毕竟,你已经看到,minidom.parse 可以只接收文件名,并自动执行所有打开文件和关闭无用文件的行为。不错,如果你知道正要解析的是一个本地文件,你可以传递文件名而且 minidom.parse 可以足够聪明地做正确的事情(Do The Right Thing™),这一切都不会有问题。但是请注意,使用类文件,会使分析直接从 Internet 上来的 XML 文档变得多么相似和容易!BR
我就纳闷了,怎么“做正确的事情”也成了 trademark。顺便加了个注释
这是一部著名的电影。——译注
e10.2, (1):
正如在前一章中所看到的,……
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 表示。
e10.3down:OK,所以你可以使用 minidom.parse 函数来解析本地文件和远端 URL,但对于解析字符串,你使用……一个不同的函数。BR
好吧,所以你可以使用 minidom.parse 函数来解析本地文件和远端 URL,但对于解析字符串,你使用……另一个函数。
e10.4up:如果有一个方法可以把字符串转换成类文件对象,那么你可以只把
这个对象传递给 minidom.parse 就可以了。
只要
e10.4, (1):StringIO 模块只包含了单个
类,也叫 StringIO,它允许你将一个字符串转换为一个类文件对象。这个
StringIO 类在创建实例的时候接收字符串作为参数。
一个
e10.4, (4):任何时候,read 都将返回字符串的未读剩余
部分。
e10.5, (1):……它将调用对象的 read 方法并高兴的开始解析,绝不会知道它的输入源源
自一个硬编码的字符串。
e10.5down:那么现在你知道了如何使用单个
函数,minidom.parse,来解析一个保存在 web 页面上、本地文件中或硬编码字符串中的 XML 文档。
同一个
e10.6, (1):……source 是某种类型的字符串;它可能是一个 URL(例如 'http://slashdot.org/slashdot.rdf' ),一个本地文件的完整或者部分路径名(例如 'binary.xml'),或者是一个包含了需要解析
XML 数据的字符串。待解析
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 引起的错误。感觉上
这样做非常好,因为如果 urllib 将来支持更多的 URL 类型,不用重新编码就可以支持它们。
e10.6, (3):再一次,你不用做任何特别的事来检查 source 是否是一个有效的文件名(总之在不同的平台上,判断文件名有效性的规则变化很大,那么不管怎样做都可能会判断错)。BR
再一次,你不用做任何特别的事来检查 source 是否是一个有效的文件名(在不同的平台上,判断文件名有效性的规则变化很大,因此不管怎样做都可能会判断错)。
e10.6, (4):到这里,你需要假设 source 是一个其中有硬编码数据的字符串(因为没有什么可以判断的了),所以你可以使用 StringIO 从中创建一个类文件对象并将它返回。(实际上,由于使用了 str 函数,所以 source 没有必要一定是字符串;它可以是任何对象,你可以使用它的字符串表示形式,通过它的定义的 __str__ 特殊方法。)
到这里,你需要假设 source 是一个其中有硬编码数据的字符串(因为没有别的可以判断的了),所以你可以使用 StringIO 从中创建一个类文件对象并将它返回。(实际上,由于使用了 str 函数,所以 source 没有必要一定是字符串;它可以是任何对象,你可以使用它的字符串表示形式,只要定义了它的 __str__ 专用方法。)
e10.6down:……构造一个函数,接收一个指向 XML 文档的 source,而且无需知道这个 source 的含义,并
解析它。
然后
标准输入、输出和错误
Para 2:……当你 print 某些东西时,结果前往 stdout 管道;当你的程序崩溃并打印出调试信息(类似于
Python 中的
traceback(错误跟踪))的时候,信息前往 stderr 管道。
例如
e10.8, (1):正如
在例 6.9, “简单计数”中看到的,……
e10.8, (3):像 stdout
,stderr 并不为你添加硬回车;如果需要,要自己加上。
和 stdout 一样
e10.8down:……然而,它们仍然是类文件对象,并且你可以将其它任何文件或者类文件对象赋值给它们来重定向它们的输出。BR
然而,它们仍然是类文件对象,因此你可以将其它任何(类)文件对象赋值给它们来重定向其输出。
e10.9:在 Windows 上,你可以使用 type 来代替 cat 显示文件的内容。BR
在 Windows 上,你要使用 type 来代替 cat 显示文件的内容。
e10.9, (4):将所有后续的输出重定向到刚才打开的新文件上。BR
所有后续的输出都会被重定向到刚才打开的新文件上。
e10.9, (5):这样只会将输出结果“printed
”到日志文件中;……
打印
查询缓冲节点
查找节点的直接子节点
根据节点类型创建不同的处理器
处理命令行参数
全部放在一起