fileinput
fileinput - 迭代来自多个输入流的行
源代码:
Lib / fileinput.py
该模块实现了一个辅助类和函数,可以在标准输入或文件列表上快速编写循环。如果您只想读取或写入一个文件,请参阅open()
。
典型的用途是:
import fileinput
for line in fileinput.input():
process(line)
这遍历了列出的所有文件的行sys.argv[1:]
,默认sys.stdin
列表为空。如果文件名是'-'
,它也被替换sys.stdin
。要指定替代的文件名列表,请将其作为第一个参数传递给input()
。单个文件名也是允许的。
所有的文件都在文本模式
下,默认打开的,但你可以通过指定覆盖此模式
在调用参数input()
或FileInput()
。如果在打开或读取文件期间发生I / O错误,IOError
则会引发。
如果sys.stdin
多次使用,第二次和以后的使用将不会返回任何行,除了可能用于交互式使用,或者它已被明确重置(例如使用sys.stdin.seek(0)
)之外。
空文件打开并立即关闭; 他们出现在文件名列表中的唯一时刻是显而易见的,那就是最后打开的文件是空的。
行与任何换行符一并返回,这意味着文件的最后一行可能没有。
您可以控制文件是由通过设置开口钩打开openhook
参数fileinput.input()
或FileInput()
。钩子必须是一个函数,它接受两个参数,即文件名
和模式
,并返回相应打开的类文件对象。这个模块已经提供了两个有用的钩子。
以下功能是该模块的主要界面:
fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])
创建FileInput
类的一个实例。该实例将用作此模块功能的全局状态,并在迭代期间返回使用。这个函数的参数将被传递给FileInput
类的构造函数。
在版本2.5中进行了更改:添加了模式
和openhook
参数。
在版本2.7.12中更改:不再使用bufsize
参数。
以下功能使用创建的全局状态fileinput.input(
如果没有活动状态,RuntimeError则提
出。
fileinput.filename()
返回当前正在读取的文件的名称。在阅读第一行之前,返回None
。
fileinput.fileno()
返回当前文件的整数“文件描述符”。当没有文件打开时(在第一行之前和文件之间),返回-1
。
2.5版本中的新功能。
fileinput.lineno()
返回刚刚读取的行的累计行号。在阅读第一行之前,返回0
。读完最后一个文件的最后一行后,返回该行的行号。
fileinput.filelineno()
返回当前文件中的行号。在阅读第一行之前,返回0
。读完最后一个文件的最后一行后,返回文件中该行的行号。
fileinput.isfirstline()
如果刚刚读取的行是其文件的第一行,则返回true,否则返回false。
fileinput.isstdin()
如果读取最后一行sys.stdin
,则返回true,否则返回false。
fileinput.nextfile()
关闭当前文件,以便下一次迭代将读取下一个文件的第一行(如果有的话); 不从文件读取的行数不会计入累计行数。只有在读取下一个文件的第一行之后,文件名才会更改。在阅读第一行之前,此功能无效;它不能用于跳过第一个文件。读完最后一个文件的最后一行后,此功能不起作用。
fileinput.close()
关闭序列。
实现模块提供的序列行为的类也可用于子类化:
class fileinput.FileInput([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])
类FileInput
是实现; 它的方法filename()
,fileno()
,lineno()
,filelineno()
,isfirstline()
,isstdin()
,nextfile()
和close()
对应于所述模块中的相同名称的功能。另外它有一个readline()
返回下一个输入行的__getitem__()
方法和一个实现序列行为的方法。序列必须严格按顺序访问; 随机访问并readline()
不能混合使用。
使用模式,
您可以指定将传递给哪个文件模式open()
。它必须是一个'r'
,'rU'
,'U'
和'rb'
。
openhook
,当给出时,必须是一个函数,它有两个参数,文件名
和模式
,并返回相应的打开的文件对象。您不能使用就地
和openhook
在一起。
在版本2.5中进行了更改:添加了模式
和openhook
参数。
在版本2.7.12中更改:不再使用bufsize
参数。
可选就地过滤:如果将关键字参数inplace=1传递给构造函数fileinput.input()或将其传递给FileInput构造函数,则文件将移至备份文件,并将标准输出定向至输入文件(如果与备份文件具有相同名称的文件已存在,它会被静静地取代)。这使得可以编写一个过滤器来重写其输入文件。如果给出备份参数(通常为backup='.<some extension>'),则它指定备份文件的扩展名,并且备份文件保留在附近; 默认情况下,扩展名是'.bak'当输出文件关闭时被删除。当读取标准输入时,就地过滤被禁用。
注意
当前实现不适用于MS-DOS 8 + 3文件系统。
以下两个打开挂钩由该模块提供:
fileinput.hook_compressed(filename, mode)
透明地打开使用gzip
和bzip2压缩的文件(由扩展程序识别)'.gz'
和'.bz2'
使用gzip
和bz2
模块。如果文件扩展名不是'.gz'
或'.bz2'
,文件是正常打开的(即,open()
没有任何解压缩)。
Usage example: fi = fileinput.FileInput(openhook=fileinput.hook_compressed)
2.5版本中的新功能。
fileinput.hook_encoded(encoding)
返回一个打开每个文件的钩子io.open()
,使用给定的编码
读取文件。
用法示例: fi = fileinput.FileInput(openhook=fileinput.hook_encoded("iso-8859-1"))
注意
有了这个钩子,FileInput
可能会根据指定的编码
返回Unicode字符串。
2.5版本中的新功能。