首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

fileinput

源代码: Lib / fileinput.py

该模块实现了一个辅助类和函数,可以在标准输入或文件列表上快速编写循环。如果您只想读取或写入一个文件,请参阅open()

典型的用途是:

代码语言:javascript
复制
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'使用gzipbz2模块。如果文件扩展名不是'.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版本中的新功能。

扫码关注腾讯云开发者

领取腾讯云代金券