fileinput
---重复来自多个输入流的行¶
源代码: Lib/fileinput.py
此模块实现一个助手类和函数,以快速地在标准输入或文件列表上编写循环。如果您只想读取或写入一个文件,请参阅 open()
.
典型用途是:
import fileinput
for line in fileinput.input():
process(line)
这将遍历中列出的所有文件的行。 sys.argv[1:]
,默认为 sys.stdin
如果列表为空。如果文件名是 '-'
,它也被替换为 sys.stdin
以及可选参数 mode 和 开口钩 被忽略。要指定文件名的可选列表,请将其作为第一个参数传递给 input()
. 也允许使用单个文件名。
默认情况下,所有文件都以文本模式打开,但可以通过指定 mode 调用中的参数 input()
或 FileInput
. 如果在打开或读取文件时发生I/O错误, OSError
提高了。
如果 sys.stdin
被多次使用,第二次及以后的使用将不会返回任何行,除非可能是交互式使用,或者如果它已被显式重置(例如使用 sys.stdin.seek(0)
)
空文件被打开并立即关闭;它们出现在文件名列表中的唯一时间是最后打开的文件为空时。
返回的行中有完整的新行,这意味着文件中的最后一行可能没有新行。
您可以通过提供一个打开钩子来控制如何打开文件 开口钩 参数到 fileinput.input()
或 FileInput()
. 钩子必须是一个接受两个参数的函数, filename 和 mode ,并返回相应打开的类似对象的文件。这个模块已经提供了两个有用的钩子。
以下功能是本模块的主要接口:
- fileinput.input(files=None, inplace=False, backup='', *, mode='r', openhook=None)¶
创建的实例
FileInput
类。实例将用作此模块函数的全局状态,并在迭代期间返回使用。此函数的参数将传递给FileInput
类。这个
FileInput
实例可以用作with
语句。在这个例子中, input 在with
语句已退出,即使发生异常::with fileinput.input(files=('spam.txt', 'eggs.txt')) as f: for line in f: process(line)
在 3.2 版更改: 可以用作上下文管理器。
在 3.8 版更改: 关键字参数 mode 和 开口钩 现在只显示关键字。
以下函数使用由创建的全局状态 fileinput.input()
;如果没有活动状态, RuntimeError
提高了。
- fileinput.filename()¶
返回当前正在读取的文件的名称。在读取第一行之前,返回
None
.
- fileinput.fileno()¶
返回当前文件的整数“文件描述符”。当没有打开任何文件时(在第一行之前和文件之间),返回
-1
.
- fileinput.lineno()¶
返回刚刚读取的行的累积行号。在读取第一行之前,返回
0
. 读取最后一个文件的最后一行后,返回该行的行号。
- fileinput.filelineno()¶
返回当前文件中的行号。在读取第一行之前,返回
0
.读取最后一个文件的最后一行后,返回该文件中该行的行号。
- fileinput.isfirstline()¶
返回
True
如果刚读取的行是其文件的第一行,则返回False
.
- fileinput.isstdin()¶
返回
True
如果最后一行是从sys.stdin
,否则返回False
.
- fileinput.nextfile()¶
关闭当前文件,以便下次迭代将从下一个文件(如果有)中读取第一行;未从文件中读取的行不会计入累积行计数。在读取下一个文件的第一行之前,不会更改文件名。在读取第一行之前,此函数无效;它不能用于跳过第一个文件。读取最后一个文件的最后一行后,此函数无效。
- fileinput.close()¶
关闭序列。
实现模块提供的序列行为的类也可用于子类化:
- class fileinput.FileInput(files=None, inplace=False, backup='', *, mode='r', openhook=None)¶
等级
FileInput
是实现;它的方法filename()
,fileno()
,lineno()
,filelineno()
,isfirstline()
,isstdin()
,nextfile()
和close()
对应于模块中同名的函数。此外,它还有一个readline()
返回下一个输入行的方法,以及__getitem__()
实现序列行为的方法。必须严格按照顺序访问序列;随机访问和readline()
不能混合。用 mode 您可以指定将传递到哪个文件模式
open()
. 它一定是'r'
,'rU'
,'U'
和'rb'
.这个 开口钩 如果给定,则必须是接受两个参数的函数, filename 和 mode ,并返回相应打开的类似对象的文件。不能使用 原地 和 开口钩 一起。
A
FileInput
实例可以用作with
语句。在这个例子中, input 在with
语句已退出,即使发生异常::with FileInput(files=('spam.txt', 'eggs.txt')) as input: process(input)
在 3.2 版更改: 可以用作上下文管理器。
3.4 版后已移除: 这个
'rU'
和'U'
模式。3.8 版后已移除: 支持
__getitem__()
方法已弃用。在 3.8 版更改: 关键字参数 mode 和 开口钩 现在只显示关键字。
Optional in-place filtering: 如果关键字参数 inplace=True
传递给 fileinput.input()
或者到 FileInput
构造器,将文件移动到备份文件,并将标准输出定向到输入文件(如果已存在与备份文件同名的文件,则将静默替换该文件)。这样就可以编写一个过滤器来就地重写其输入文件。如果 备份 给出参数(通常为 backup='.<some extension>'
)指定备份文件的扩展名,备份文件保留在周围;默认情况下,扩展名为 '.bak'
当输出文件关闭时会被删除。当读取标准输入时,就地过滤被禁用。
本模块提供以下两个开口钩: