fileinput —遍历来自多个 Importing 流的行

源代码: Lib/fileinput.py


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

典型的用法是:

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

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

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

在版本 3.3 中更改:IOError曾经被提出过;现在是OSError的别名。

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

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

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

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

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

FileInput实例可以在with语句中用作上下文 Management 器。在此示例中,即使退出with语句,也将关闭* input *,即使发生异常:

with fileinput.input(files=('spam.txt', 'eggs.txt')) as f:
    for line in f:
        process(line)

在版本 3.2 中更改:可以用作上下文 Management 器。

在版本 3.8 中更改:关键字参数* mode openhook *现在仅用作关键字。

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

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

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

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

FileInput实例可以在with语句中用作上下文 Management 器。在此示例中,即使退出with语句,也将关闭* input *,即使发生异常:

with FileInput(files=('spam.txt', 'eggs.txt')) as input:
    process(input)

在版本 3.2 中更改:可以用作上下文 Management 器。

从 3.4 版开始不推荐使用:'rU''U'模式。

从 3.8 版开始不推荐使用:不支持getitem()方法。

在版本 3.8 中更改:关键字参数* mode openhook *现在仅用作关键字。

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

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

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

用法示例:fi = fileinput.FileInput(openhook=fileinput.hook_encoded("utf-8", "surrogateescape"))

在 3.6 版中进行了更改:添加了可选的* errors *参数。

首页