<p>fileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作。<br>
该模块的input()函数有点类似文件readlines()方法,区别在于:<br>
前者是一个迭代对象,即每次只生成一行,需要用for循环迭代。<br>
后者是一次性读取所有行。在碰到大文件的读取时,前者无疑效率更高效。<br>
用fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便。</p>
<p><strong>【典型用法】</strong></p>
<p></p><div class="codetitle"><span><a class="copybut" data="99496" id="copybut99496"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code99496"><br>
import fileinput<br>
for line in fileinput.input():<br>
process(line)<br>
</div>
<p><strong>【基本格式】</strong><br>
</p><div class="codetitle"><span><a class="copybut" data="91210" id="copybut91210"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code91210"><br>
fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])<br>
</div><p><br>
<strong>【默认格式】</strong><br>
</p><div class="codetitle"><span><a class="copybut" data="42625" id="copybut42625"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code42625"><br>
fileinput.input (files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)<br>
files: #文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...] <br>
inplace: #是否将标准输出的结果写回文件,默认不取代 <br>
backup: #备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。 <br>
bufsize: #缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可 <br>
mode: #读写模式,默认为只读 <br>
openhook: #该钩子用于控制打开的所有文件,比如说编码方式等; <br>
</div><p><br>
<strong>【常用函数】</strong><br>
</p><div class="codetitle"><span><a class="copybut" data="82146" id="copybut82146"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code82146"><br>
fileinput.input() #返回能够用于for循环遍历的对象 <br>
fileinput.filename() #返回当前文件的名称 <br>
fileinput.lineno() #返回当前已经读取的行的数量(或者序号) <br>
fileinput.filelineno() #返回当前读取的行的行号 <br>
fileinput.isfirstline() #检查当前行是否是文件的第一行 <br>
fileinput.isstdin() #判断最后一行是否从stdin中读取 <br>
fileinput.close() #关闭队列 <br>
</div><p><br>
<strong>【常见例子】</strong></p>
<p>例子01: 利用fileinput读取一个文件所有行<br>
</p><div class="codetitle"><span><a class="copybut" data="63584" id="copybut63584"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code63584"><br>
>>> import fileinput <br>
>>> for line in fileinput.input('data.txt'): <br>
print line, <br>
#输出结果 <br>
Python <br>
Java <br>
C/C++ <br>
Shell <br>
</div>
<p>命令行方式:<br>
</p><div class="codetitle"><span><a class="copybut" data="45830" id="copybut45830"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code45830"><br>
#test.py <br>
import fileinput <br>
<br>
for line in fileinput.input(): <br>
print fileinput.filename(),'|','Line Number:',fileinput.lineno(),'|: ',line <br>
<br>
c:>python test.py data.txt <br>
data.txt | Line Number: 1 |: Python <br>
data.txt | Line Number: 2 |: Java <br>
data.txt | Line Number: 3 |: C/C++ <br>
data.txt | Line Number: 4 |: Shell <br>
</div>
<p>例子02: 利用fileinput对多文件操作,并原地修改内容<br>
</p><div class="codetitle"><span><a class="copybut" data="72533" id="copybut72533"><u>复制代码</u></a></span> 代码如下:</div><div class="codebody" id="code72533"><br>
#test.py <br>
#---样本文件--- <br>
c:\Python27>type 1.txt <br>
first <br>
second <br>
<br>
c:\Python27>type 2.txt <br>
third <br>
fourth <br>
#---样本文件--- <br>
import fileinput <br>
<br>
def process(line): <br>
return line.rstrip() + ' line' <br>
<br>
for line in fileinput.input(['1.txt','2.txt'] |
|