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.nextfile()
关闭当前文件,以便下次迭代将从下一个文件(如果有)中读取第一行;未从文件中读取的行不会计入累积行计数。在读取下一个文件的第一行之前,不会更改文件名。在读取第一行之前,此函数无效;它不能用于跳过第一个文件。读取最后一个文件的最后一行后,此函数无效。
实现模块提供的序列行为的类也可用于子类化:
- 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'
当输出文件关闭时会被删除。当读取标准输入时,就地过滤被禁用。
本模块提供以下两个开口钩:
- fileinput.hook_compressed(filename, mode)
透明地打开用gzip和bzip2压缩的文件(由扩展名识别
'.gz'
和'.bz2'
)使用gzip
和bz2
模块。如果文件扩展名不是'.gz'
或'.bz2'
,文件正常打开(即,使用open()
没有任何减压)。用法示例:
fi = fileinput.FileInput(openhook=fileinput.hook_compressed)
- fileinput.hook_encoded(encoding, errors=None)
返回一个钩子,该钩子用
open()
,使用给定的 encoding 和 errors 读取文件。用法示例:
fi = fileinput.FileInput(openhook=fileinput.hook_encoded("utf-8", "surrogateescape"))
在 3.6 版更改: 添加了可选的 errors 参数。