Python fileinput模块使用实例

论坛 期权论坛     
niminba   2021-5-22 16:53   7   0
<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>
&nbsp;&nbsp;&nbsp; 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:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]&nbsp; <br>
inplace:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #是否将标准输出的结果写回文件,默认不取代&nbsp; <br>
backup:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。&nbsp; <br>
bufsize:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可&nbsp; <br>
mode:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #读写模式,默认为只读&nbsp; <br>
openhook:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #该钩子用于控制打开的所有文件,比如说编码方式等;&nbsp; <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()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #返回能够用于for循环遍历的对象&nbsp; <br>
fileinput.filename()&nbsp;&nbsp;&nbsp; #返回当前文件的名称&nbsp; <br>
fileinput.lineno()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #返回当前已经读取的行的数量(或者序号)&nbsp; <br>
fileinput.filelineno()&nbsp; #返回当前读取的行的行号&nbsp; <br>
fileinput.isfirstline() #检查当前行是否是文件的第一行&nbsp; <br>
fileinput.isstdin()&nbsp;&nbsp;&nbsp;&nbsp; #判断最后一行是否从stdin中读取&nbsp; <br>
fileinput.close()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #关闭队列&nbsp; <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>
&gt;&gt;&gt; import fileinput&nbsp; <br>
&gt;&gt;&gt; for line in fileinput.input('data.txt'):&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print line,&nbsp; <br>
#输出结果&nbsp; <br>
Python&nbsp; <br>
Java&nbsp;&nbsp; <br>
C/C++&nbsp; <br>
Shell&nbsp; <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&nbsp; <br>
import fileinput&nbsp; <br>
&nbsp; <br>
for line in fileinput.input():&nbsp; <br>
&nbsp;&nbsp;&nbsp; print fileinput.filename(),'|','Line Number:',fileinput.lineno(),'|: ',line&nbsp; <br>
&nbsp; <br>
c:&gt;python test.py data.txt&nbsp; <br>
data.txt | Line Number: 1 |:&nbsp; Python&nbsp; <br>
data.txt | Line Number: 2 |:&nbsp; Java&nbsp; <br>
data.txt | Line Number: 3 |:&nbsp; C/C++&nbsp; <br>
data.txt | Line Number: 4 |:&nbsp; Shell&nbsp; <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&nbsp; <br>
#---样本文件---&nbsp; <br>
c:\Python27&gt;type 1.txt&nbsp; <br>
first&nbsp; <br>
second&nbsp; <br>
&nbsp; <br>
c:\Python27&gt;type 2.txt&nbsp; <br>
third&nbsp; <br>
fourth&nbsp; <br>
#---样本文件---&nbsp; <br>
import fileinput&nbsp; <br>
&nbsp; <br>
def process(line):&nbsp; <br>
&nbsp;&nbsp;&nbsp; return line.rstrip() + ' line'&nbsp; <br>
&nbsp; <br>
for line in fileinput.input(['1.txt','2.txt']
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP