fileinput
— 遍历来自多个输入流的行
¶
源代码: Lib/fileinput.py
此模块实现帮手类和函数,以快速编写标准输入或文件列表的循环。若仅仅想要读写一文件,见
open()
.
典型用法:
import fileinput
for line in fileinput.input():
process(line)
遍历所有文件行,文件列出于
sys.argv[1:]
,默认为
sys.stdin
若列表为空。若文件名为
'-'
,它也被替换为
sys.stdin
。要指定文件名替代列表,将它作为第一自变量传递给
input()
。单文件名也是允许的。
默认情况下,所有文件按文本模式打开,但可以覆盖这通过指定
mode
参数在调用
input()
or
FileInput
。若在打开或读取文件期间发生 I/O 错误,
OSError
被引发。
若
sys.stdin
被多次使用,第二次和进一步使用将不返回行 (除或许为交互使用外),或者若它被明确重置 (如使用
sys.stdin.seek(0)
).
Empty files are opened and immediately closed; the only time their presence in the list of filenames is noticeable at all is when the last file opened is empty.
Lines are returned with any newlines intact, which means that the last line in a file may not have one.
You can control how files are opened by providing an opening hook via the
openhook
parameter to
fileinput.input()
or
FileInput()
. The hook must be a function that takes two arguments,
filename
and
mode
, and returns an accordingly opened file-like object. Two useful hooks are already provided by this module.
以下函数是此模块的首要接口:
fileinput.
input
(
files=None
,
inplace=False
,
backup=''
,
bufsize=0
,
mode='r'
,
openhook=None
)
¶
创建实例化的
FileInput
class. The instance will be used as global state for the functions of this module, and is also returned to use during iteration. The parameters to this function will be passed along to the constructor of the
FileInput
类。
FileInput
instance can be used as a context manager in the
with
语句。在此范例中,
input
is closed after the
with
statement is exited, even if an exception occurs:
with fileinput.input(files=('spam.txt', 'eggs.txt')) as f:
for line in f:
process(line)
3.2 版改变: 可以用作上下文管理器。
从 3.6 版起弃用,将在 3.8 版中移除: bufsize 参数。
以下函数使用的全局状态创建通过
fileinput.input()
;若没有活动状态,
RuntimeError
被引发。
fileinput.
filename
(
)
¶
Return the name of the file currently being read. Before the first line has been read, returns
None
.
fileinput.
fileno
(
)
¶
Return the integer “file descriptor” for the current file. When no file is opened (before the first line and between files), returns
-1
.
fileinput.
lineno
(
)
¶
Return the cumulative line number of the line that has just been read. Before the first line has been read, returns
0
. After the last line of the last file has been read, returns the line number of that line.
fileinput.
filelineno
(
)
¶
Return the line number in the current file. Before the first line has been read, returns
0
. After the last line of the last file has been read, returns the line number of that line within the file.
fileinput.
isfirstline
(
)
¶
Returns true if the line just read is the first line of its file, otherwise returns false.
fileinput.
isstdin
(
)
¶
Returns true if the last line was read from
sys.stdin
,否则返回 false。
fileinput.
nextfile
(
)
¶
Close the current file so that the next iteration will read the first line from the next file (if any); lines not read from the file will not count towards the cumulative line count. The filename is not changed until after the first line of the next file has been read. Before the first line has been read, this function has no effect; it cannot be used to skip the first file. After the last line of the last file has been read, this function has no effect.
fileinput.
close
(
)
¶
关闭序列。
The class which implements the sequence behavior provided by the module is available for subclassing as well:
fileinput.
FileInput
(
files=None
,
inplace=False
,
backup=''
,
bufsize=0
,
mode='r'
,
openhook=None
)
¶
类
FileInput
是实现;其方法
filename()
,
fileno()
,
lineno()
,
filelineno()
,
isfirstline()
,
isstdin()
,
nextfile()
and
close()
correspond to the functions of the same name in the module. In addition it has a
readline()
method which returns the next input line, and a
__getitem__()
method which implements the sequence behavior. The sequence must be accessed in strictly sequential order; random access and
readline()
cannot be mixed.
With
mode
you can specify which file mode will be passed to
open()
。它必须是某一
'r'
,
'rU'
,
'U'
and
'rb'
.
openhook , when given, must be a function that takes two arguments, filename and mode , and returns an accordingly opened file-like object. You cannot use inplace and openhook 在一起。
A
FileInput
instance can be used as a context manager in the
with
语句。在此范例中,
input
is closed after the
with
statement is exited, even if an exception occurs:
with FileInput(files=('spam.txt', 'eggs.txt')) as input:
process(input)
3.2 版改变: 可以用作上下文管理器。
从 3.4 版起弃用:
'rU'
and
'U'
模式。
从 3.6 版起弃用,将在 3.8 版中移除: bufsize 参数。
Optional in-place filtering:
if the keyword argument
inplace=True
会被传递给
fileinput.input()
or to the
FileInput
constructor, the file is moved to a backup file and standard output is directed to the input file (if a file of the same name as the backup file already exists, it will be replaced silently). This makes it possible to write a filter that rewrites its input file in place. If the
backup
parameter is given (typically as
backup='.<some
extension>'
), it specifies the extension for the backup file, and the backup file remains around; by default, the extension is
'.bak'
and it is deleted when the output file is closed. In-place filtering is disabled when standard input is read.
此模块提供以下 2 打开挂钩:
fileinput.
hook_compressed
(
filename
,
mode
)
¶
Transparently opens files compressed with gzip and bzip2 (recognized by the extensions
'.gz'
and
'.bz2'
) 使用
gzip
and
bz2
modules. If the filename extension is not
'.gz'
or
'.bz2'
, the file is opened normally (ie, using
open()
without any decompression).
用法范例:
fi
=
fileinput.FileInput(openhook=fileinput.hook_compressed)