【转】python 之fileinput模块

上一篇 / 下一篇  2018-03-25 14:15:56 / 个人分类:Python

fileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作。

该模块的input()函数有点类似文件readlines()方法,区别在于:

前者是一个迭代对象,即每次只生成一行,需要用for循环迭代。

后者是一次性读取所有行。在碰到大文件的读取时,前者无疑效率更高效。

用fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便。

典型用法

import fileinput
for line in fileinput.input():
    process(line)

基本格式

fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])

默认格式

fileinput.input (files=None, inplace=False, backup='', bufsize=0, mode='r', penhook=None)

[python] view plain copy
  1. files:                  #文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]  
  2. inplace:                #是否将标准输出的结果写回文件,默认不取代  
  3. backup:                 #备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。  
  4. bufsize:                #缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可  
  5. mode:                   #读写模式,默认为只读  
  6. openhook:               #该钩子用于控制打开的所有文件,比如说编码方式等;  
常用函数
[python] view plain copy
  1. fileinput.input()       #返回能够用于for循环遍历的对象  
  2. fileinput.filename()    #返回当前文件的名称  
  3. fileinput.lineno()      #返回当前已经读取的行的数量(或者序号)  
  4. fileinput.filelineno()  #返回当前读取的行的行号  
  5. fileinput.isfirstline() #检查当前行是否是文件的第一行  
  6. fileinput.isstdin()     #判断最后一行是否从stdin中读取  
  7. fileinput.close()       #关闭队列  

常见例子

  • 例子01: 利用fileinput读取一个文件所有行
[python] view plain copy
  1. >>> import fileinput  
  2. >>> for line in fileinput.input('data.txt'):  
  3.         print line,  
  4. #输出结果  
  5. Python  
  6. Java   
  7. C/C++  
  8. Shell  

命令行方式:

[python] view plain copy
  1. #test.py  
  2. import fileinput  
  3.   
  4. for line in fileinput.input():  
  5.     print fileinput.filename(),'|','Line Number:',fileinput.lineno(),'|: ',line  
  6.   
  7. c:>python test.py data.txt  
  8. data.txt | Line Number: 1 |:  Python  
  9. data.txt | Line Number: 2 |:  Java  
  10. data.txt | Line Number: 3 |:  C/C++  
  11. data.txt | Line Number: 4 |:  Shell  
  • 例子02: 利用fileinput对多文件操作,并原地修改内容
[python] view plain copy
  1. #test.py  
  2. #---样本文件---  
  3. c:\Python27>type 1.txt  
  4. first  
  5. second  
  6.   
  7. c:\Python27>type 2.txt  
  8. third  
  9. fourth  
  10. #---样本文件---  
  11. import fileinput  
  12.   
  13. def process(line):  
  14.     return line.rstrip() + ' line'  
  15.   
  16. for line in fileinput.input(['1.txt','2.txt'],inplace=1):  
  17.     print process(line)  
  18.   
  19. #---结果输出---  

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2018-04-22  
1234567
891011121314
15161718192021
22232425262728
2930     

数据统计

  • 访问量: 3158
  • 日志数: 48
  • 建立时间: 2018-01-19
  • 更新时间: 2018-04-07

RSS订阅

Open Toolbar
博聚网