7-11<X6> fileinfo.xml 异常和文件处理
Contents
6.1 异常处理
列举下:在这些情况下,我们都在简单使用 Python IDE:一个错误发生了,异常被打印出来(根据你的 IDE,有意地以一种刺眼的红色形式表示)
在这些情况下,我们都在简单地使用 Python IDE:一个错误发生了,异常被打印出来 (取决于你的 IDE,可能会有意地以一种刺眼的红色形式表示)
下一段:但是许多时候,一个异常是可以预计
的……
预见
例 6.1 下, Para 1:Would you rather get back an unusable file object to a non-existent file?
你希望获得一个没有用的文件对象而不是一个不存在的文件吧?
注意这里的to,不是表比较,而是引导object的定语,表指向(这样的用法很常见,eg. a pointer to an integer)
你该不会希望获得一个指向不存在的文件的对象吧?
例6.2, (1):termios 是一个 UNIX 特定模块
termios 是一个特定的 UNIX 模块
例6.2, (2):……它是一个 Windows 特定模块
它是一个特定的 Windows 模块
例6.2, (3):它是一个 Mac OS 特定模块
它是一个特定的 Mac OS 模块
例6.2, (4):……注意,我们在这里做的:……
注意我们在这里所做的:……
例6.2, (5):一处样式错误。还请参见源文件。
例6.2, (5), Line -1:
Each of the other try...except blocks has similar else clauses to bind getpass to the appropriate function when you find an import that works.
其它每个 try...except 块有着相似的 else 子句,当我们找到一个 import 可用时,来绑定 getpass 到适合的函数。
其它每个 try...except 块有着相似的 else 子句,当我们发现一个 import 可用时,就绑定 getpass 到适合的函数。
6.2 与文件对象共事
作名词短语的打开文件
一律改为
被打开文件。
6.2.1 读取文件
Para 1:……正如下一个例子所显示
的。
展示
例6.4, (2):0 表示移动到一个绝对位置(从文件开始算起),0 表示移到一个相对位置(从当前位置算起),还有 2 表示对于文件尾的一个相对位置。
0 表示移动到一个绝对位置(从文件起始处算起),1 表示移到一个相对位置(从当前位置算起),还有 2 表示相对于文件尾的位置。同上:添加了译注,说明了“文件尾”指的是文件的结束标记,而不是最后一个字节。
例6.4, (3):tell 方法确认了已经移到当前文件位置。
有必要和 例6.4, (5) 里面的用词保持一致(原文可是一致的)。
tell 方法确认了当前位置已经移动了。
例6.4, (4):我们本可以在这里简单地说一下
read(),……
6.2.2 关闭文件
Para 1:打开文件消耗系统资源,并且依赖于文件模式,其它程序或许不能访问它们。
打开文件消耗系统资源,并且其间其它程序可能无法访问它们(取决于文件模式)。
例6.5, (1):……打开文件要消耗系统资源,并且根据文件模式,其它程序可能不能使用它们。……
%^$#`?!!原文可没有把上文重复一次啊
删去!
例6.5, (2):刷新被缓冲的系统确实
还未写入的输出(如果有的话),……
例6.5, (4):只是因为文件被关闭,并不意味着文件对象停止存在。
文件被关闭了,但这并不意味着文件对象不再存在。
6.2.3 处理 I/O 错误
例6.6, (5):一旦文件通过 open 函数被成功地打开,我们应该绝对保证把它关闭,甚至由于 seek 或 read 方法引发了一个异常。
……即使是在 seek 或 read 方法引发了一个异常时。
例6.6, (6), Line -1:……并且处理将正常继续,从 tryexcept 块的下一行代码
开始。
6.2.4 写入文件
Para 2, 3:"Append" 模式将数据追加到文件尾。
"write" 模式将覆盖文件的原有内容。
有必要交代一下中文含义。
追加(Append)模式将数据追加到文件尾。
写入(write)模式将覆盖文件的原有内容。例6.7, (1):你可以大胆地开始创建任何的
新文件 test.log 或覆盖现有文件,……
例6.7, (3):file 是 open 的同义语。它用一行打开文件,读取内容,并打印它们。
……这一行语句打开文件,读取内容,并打印它们。
例6.7, (5):……同时注意回车符并没包含进来。
意思不是很清晰
同时注意两行之间并没包含回车符。
6.3 for 循环
例6.8, (2):for 循环可以在它里面有任意条数的代码行。
前者不符合中文表达习惯;“条数”和“代码行”有重复之嫌。
for 循环可以包含任意数目的代码行。
例6.8, (3):这就是为什么你以前没看到过 for 循环的原因:……
与后面的“原因”重复了。
删去
例6.10, (3):使用 多变量赋值 和 list 解析,你可以使用单行语句来替换整个 for 循环。在实际的编码中是否这样做只是个人风格问题;我喜欢它是因为,可以使得
将一个 dictionary 映射到一个 list,然后将 list 合并成一个字符串,这一过程显得很清晰。
例6.11, (1):一旦我们读出文件最后 128 个字节,第 3 到 32 字节总是歌曲的名字,……
只要我们读出文件最后 128 个字节,那么第 3 到 32 字节总是歌曲的名字,……
例6.11, (2):这个
for 变量结构……
这里的
例6.11, (3):……,接着将 parseFunc
的返回值 作为值赋值给伪字典 self 中的键字 tag。
根据上下文来看,这里指的是返回值。
6.4 使用 sys.modules
例6.12, (1):这个
sys 模块包含了系统级的信息,……
例6.14, (1):每个 python 类
都 拥有一个内置的 类属性 __module__,……
例6.15, (3):hasattr 是一个补充性的函数,用来检查是否一个对象具有一个特别的属性;……
用来检查一个对象是否具有一个特定的属性……
6.5 与 Directory 共事
例6.16, (2):ospath 的 join 函数用一个或多个部分路径名构造成一个路径名。
ospath 的 join 函数把一个或多个部分路径名连接成一个路径名。
例6.16, (3):当我
发现这一点时我高兴极了,……
例6.16, (5):将这些技术合
在一起,……
组合
例6.18, (1):listdir 函数接收一个路径名,它返回那个目录的内容的一个 list。
listdir 函数接收一个路径名,并返回那个目录的内容的 list。
例6.18, (3):在这里,我们使用 ospath.join 来确保一个全路径名,但 isfile 对一个相对于当前工作目录的部分路径也是有效的。你可以使用 os.getcwd() 来得到当前的工作目录。
在这里,我们使用 ospath.join 来确保得到一个全路径名,但 isfile 对部分路径(相对于当前目录)也是有效的。你可以使用 os.getcwd() 来得到当前目录。
例6.19, (4):我们查看是否扩展名在我们关心的文件扩展名 list 中……
我们查看扩展名是否在我们关心的文件扩展名 list 中……
例6.19下, 提示:只要有可能,你应该使用在 os 和 ospath 中的函数进行文件,目录,和路径的操作。
只要有可能,你就应该使用在 os 和 ospath 中的函数进行文件、目录和路径的操作。
例6.20上:还有一种获得 directory
内容的方法。
目录
例6.20, 标题:Listing Directories with glob
使用 glob 列出目录
例6.20, (1):正如你前面看到的,os.listdir 简单地取出一个目录路径,目录中的所有文件和子目录。
正如你前面看到的,os.listdir 简单地取一个目录路径,返回目录中的所有文件和子目录。
例6.20, (2):glob 模块,另一方面,选取
一个通配符……
接受
例6.20, (4):你可以用两个通配符仅仅调用 glob 一次立刻获得所有这些文件的一个 list。
使用两个通配符,仅仅调用 glob 一次就可以立刻获得所有这些文件的一个 list。
6.6 全部放在一起
例6.21, (1):listdirectory 是整个模块主要的引吸
之处。
有趣
例6.21, (2):……这行代码得到一个全路径名的列表,它们
是在 directory 中……
它的元素
例6.21, (6):接着我们创建这个类(不管它是什么)的一个实例,传入文件名(又是 f)给的
init 方法。
Para -1:请注意 listdirectory 完全是通用的。它事先不知道将得到文件哪种类型,或者哪些定义好的类能够处理这些文件。
……它事先不知道将得到哪种类型的文件,也不知道哪些定义好的类能够处理这些文件。
6.7 小结
Para -1:动态地 实例化未知类型的类 通过将类看成对象并传入参数
通过将类看成对象并传入参数,动态地 实例化未知类型的类