10.2. fileinput —迭代来自多个 Importing 流的行

源代码: Lib/fileinput.py


该模块实现了一个帮助器类,并具有在标准 Importing 或文件列表上快速编写循环的Function。如果您只想读取或写入一个文件,请参见open()

典型的用法是:

import fileinput
for line in fileinput.input():
    process(line)

这会在sys.argv[1:]中列出的所有文件的行上进行迭代,如果列表为空,则默认为sys.stdin。如果文件名是'-',它也将替换为sys.stdin。要指定文件名的替代列表,请将其作为第一个参数传递给input()。也允许使用单个文件名。

默认情况下,所有文件都以文本模式打开,但是您可以pass在对input()FileInput()的调用中指定* mode *参数来覆盖此文件。如果在打开或读取文件期间发生 I/O 错误,则会引发IOError

如果sys.stdin被多次使用,则第二次及以后的使用将不返回任何行,除非是交互式使用,或者已被明确重置(例如,使用sys.stdin.seek(0))。

空文件被打开并立即关闭;只有在最后一个打开的文件为空时,它们在文件名列表中的存在才是显而易见的。

返回的行将完整保留所有换行符,这意味着文件中的最后一行可能没有一行。

您可以passfileinput.input()FileInput()的* openhook 参数提供一个打开钩子来控制文件的打开方式。该钩子必须是一个带有两个参数 filename mode *的函数,并返回相应打开的类似文件的对象。该模块已经提供了两个有用的钩子。

以下Function是此模块的主要接口:

在版本 2.5 中更改:添加了* mode openhook *参数。

在版本 2.7.12 中更改:不再使用* bufsize *参数。

以下函数使用fileinput.input()创建的全局状态;如果没有活动状态,则引发RuntimeError

2.5 版的新Function。

实现模块提供的序列行为的类也可用于子类化:

使用* mode *,您可以指定将哪种文件模式传递给open()。它必须是'r''rU''U''rb'之一。

如果给定了* openhook ,它必须是一个带有两个参数 filename mode 的函数,并返回相应打开的类似文件的对象。您不能同时使用 inplace openhook *。

在版本 2.5 中更改:添加了* mode openhook *参数。

在版本 2.7.12 中更改:不再使用* bufsize *参数。

可选的就地过滤: 如果将关键字参数inplace=1传递给fileinput.input()FileInput构造函数,则该文件将移至备份文件,并且标准输出将定向到 Importing 文件(如果文件名称相同)因为备份文件已经存在,它将被静默替换)。这样就可以编写一个过滤器,该过滤器可以在原处重写其 Importing 文件。如果给定了* backup *参数(通常为backup='.<some extension>'),则它指定备份文件的 extensions,并且备份文件仍然存在。默认情况下,extensions 是'.bak',并且在关闭输出文件时将其删除。读取标准 Importing 时,将禁用就地过滤。

Note

当前的实现不适用于 MS-DOS 8 3 文件系统。

该模块提供以下两个打开钩:

用法示例:fi = fileinput.FileInput(openhook=fileinput.hook_compressed)

2.5 版的新Function。

用法示例:fi = fileinput.FileInput(openhook=fileinput.hook_encoded("iso-8859-1"))

Note

使用此钩子,FileInput可能会根据指定的* encoding *返回 Unicode 字符串。

2.5 版的新Function。

首页