• fileinput模块功能:

提供拼接一个或多个文本文件的功能,可以通过使用for循环来读取一个或多个文本文件的所有行,从而进行逐行处理(如进行显示、替换、添加行号等)。

其功能类似于linux命令的cat和sed。

input方法是fileinput模块的主要方法,input方法的参数将传递给FileInput类的构造器来创建FileInput类的一个实例(对象),该实例是一个迭代器,可用于for等迭代环境中,当然也可以用next()、__next__()方法,也支持readline()方法:

>>> obj_fi=fileinput.input(r'd:\syslogin.log')
>>> type(obj_fi)
<class 'fileinput.FileInput'>
>>> print(obj_fi)
<fileinput.FileInput object at 0x00A5FE90>
>>> dir(obj_fi)
['__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_backup', '_backupfilename', '_file', '_filelineno', '_filename', '_files', '_inplace', '_isstdin', '_mode', '_openhook', '_output', '_readline', '_savestdout', '_startlineno', 'close', 'filelineno', 'filename', 'fileno', 'isfirstline', 'isstdin', 'lineno', 'nextfile', 'readline']
>>>

input方法的函数原型:

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

参数说明如下:

files:                  #文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]
inplace:                #是否将标准输出的结果写回文件,默认不取代,只能替换文件内容,不能增加内容
backup:                 #备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。
bufsize:                #缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可
mode:                   #读写模式,默认为只读
openhook:               #该钩子用于控制打开的所有文件,比如说编码方式等;

input方法的说有参数都为关键字参数,在不带任何参数情况下,将使用命令行列出的所有文件(命令行参数列表:sys.argv[1:]),如果命令行也没有参数,则文件默认为 标准输入( sys.stdin),如果文件名为'-',也使用标准输入sys.stdin.。通常指定一个文件名列表作为input()方法的第一个参数,当然单个文件名也是允许的,也可以使用files=(‘file1‘,‘’file2‘’)格式传递文件名。下面是使用标准输入作为文件名的使用格式:

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

从3.2版本开始,fileinput实例可以用于上下文管理器,如:

with fileinput.input(files=('spam.txt', 'eggs.txt')) as f:
for line in f:
process(line)

特别注意:关键字参数 inplace=True的使用

1、如果传递了inplace=True关键字参数,则标准输出会被重定向为打开的文件,但例外的的是:如果传入的文件为标准输入,则该替换功能自动被禁用。

2、对于非标准输入文件,将用backup='.<some extension>'关键字指定的值(缺省为'.bak')作为扩展名重命名(相当于用linux的move命令)原文件,如果先前已经存在重命名的文件则直接无提示替换,同时自动将标准输出重定向为原输入文件,这就能够轻松的修改原文件,所以一定要用print打印到标准输出,如果没有用print打印到标准输出,就会把空内容回写到文件,也就是清除了文件所有内容。

  • fileinput模块的常用方法:

input()         #模块的主要方法,返回能够用于for循环遍历的对象,该对象可迭代
filename()   #返回当前正在读取的文件名,如果第一行被读取之前调用将返回None
fileno()        #返回当前文件的文件描述符(1个整数),没有文件被打开(第一行之前或文件之间的时刻)将返回-1
lineno()       #返回当前已经累加读取的行的数量(或者序号)
filelineno()     #返回当前读取的行的行号,第一行读取之前返回0,最后文件的最后行被读取之后调用,将返回最后一行所在文件的行号
isfirstline()     #检查当前行是否是所在文件的第一行,如果是则返回True,否则False
isstdin()      #如果上一行是从sys.stdin(标准输入)读取的,则返回True,否则False

nextfile()   #关掉当前文件以便从下个文件的第一行开始迭代读取

单个文件内容简单替换:

1 import fileinput
2 for line in fileinput.input('test.txt',backup='.bak',inplace=1):
3 print line.replace('Python','LinuxEye'),
4 fileinput.close()

文件内容通过正则表达式查找替换,并将原文件备份:

1 import fileinput
2 import re
3 obj_fileinput=fileinput.input(r'd:\test.txt',inplace=True,backup='.bak')
4 for line in obj_fileinput:
5 obj_re1 = re.compile(r'\bsubstitute\b', re.I | re.M)
6 content= obj_re1.sub('substitute has been replace' , line)
7 obj_re2 = re.compile(r'\breplace\b', re.I | re.M)
8 print(obj_re2.sub('in place', content))
9 fileinput.close()

判断是否是第一行:

1 import fileinput
2 for line in fileinput.input(r'd:\test.txt'):
3 if fileinput.isfirstline():
4 print(line)
5 else:
6 break
7 fileinput.close()

读取多个文件:

1 import fileinput
2 from glob import glob
3 for line in fileinput.input(glob(r'd:\*.txt')):
4 print(fileinput.lineno(), u'文件:', fileinput.filename(), u'行号:', fileinput.filelineno())
6 fileinput.close()

从标准输入读取内容:

 1 import fileinput
2
3 for line in fileinput.input():
4 print(fileinput.lineno(),': ', line)
6 fileinput.close()

fileinput模块用法的更多相关文章

  1. Python中fileinput模块使用

    fileinput模块可以对一个或多个文件中的内容进行迭代.遍历等操作.该模块的input()函数有点类似文件 readlines()方法,区别在于前者是一个迭代对象,需要用for循环迭代,后者是一次 ...

  2. fileinput模块

    刚才练习的时候,报如下错误: AttributeError: module 'fileinput' has no attribute 'input',后来Google参考这篇文章https://mai ...

  3. Pyhton 学习总结 21 :fileinput模块

    fileinput模块可以对一个或多个文件中的内容进行迭代.遍历等操作.该模块的input()函数有点类似文件readlines()方法,区别在于前者是一个迭代对象,需要用for循环迭代,后者是一次性 ...

  4. Python基础【第十一篇】文件操作(file()、open()方法和fileinput模块)

    一.file/open 内置函数 file函数的方法: 注:file 和 open的用法和功能相同这里只对file进行分析 file(‘filename’,’mode’) file(‘filename ...

  5. python笔记之常用模块用法分析

    python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...

  6. Python第二十一天 fileinput模块

    Python第二十一天    fileinput模块 fileinput模块 fileinput.input([files[, inplace[, backup[, bufsize[, mode[, ...

  7. ansible之二:模块用法

    一:ansible远程执行命令 [root@ansible ~]# ansible test -m shell -a "date" >> 2016年 08月 02日 星 ...

  8. ansible常用模块用法

    ansible常用模块用法 2015-07-21 10:25 24458人阅读 评论(1) 收藏 举报  分类: Linux(44)   ansible 版权声明:本文为博主原创文章,未经博主允许不得 ...

  9. 洗礼灵魂,修炼python(19)--文件I/O操作,linecache,fileinput模块

    文件I/O操作 1.什么是文件I/O操作 首先I/O(input/output),即输入/输出端口,然后文件,大家应该都是是什么,一个数据,一个txt或者html文档就是一个文件.文件操作就是对文件进 ...

随机推荐

  1. chrome 开发者工具使用一例

    今天搜到了一篇我想看的文章,某网站上又是弹出注册小窗遮挡,又是一堆漂浮广告,还把字体搞成灰色. 右键审查元素,找到几个div,删掉:原来那个字体的灰色,是个什么script做的遮罩,也删掉. 然后整个 ...

  2. 深度学习炼丹术 —— Taoye不讲码德,又水文了,居然写感知器这么简单的内容

    手撕机器学习系列文章就暂时更新到此吧,目前已经完成了支持向量机SVM.决策树.KNN.贝叶斯.线性回归.Logistic回归,其他算法还请允许Taoye在这里先赊个账,后期有机会有时间再给大家补上. ...

  3. (菜鸟都能看懂的)网络最大流最小割,Ford-Fulkerson及Dinic详解

    关于网络流: 1.定义 个人理解网络流的意思便是由一条条水管以及一个源点S一个汇点T和一些节点组成的一张图,现在要从S点流水到T点,问怎么流才能让流到T的流量最大.边权表示的是这条水管的最大流量,假设 ...

  4. 逆袭故事|从“点点点”到月薪17K,这个女孩子做到啦

    姓:XXX,XX VIP 学员,一名自动化测试工程师!之前在某大型培训机构转行学习软件测试时就是木子老师的学生,她也一直关注木子老师的动态,后来知道木子老师打算开设测试开发高级提升班,等开了班就报名了 ...

  5. Web服务器-并发服务器-长连接(3.4.4)

    @ 目录 1.说明 2.代码 关于作者 1.说明 每次new_socket都被强制关闭,造成短连接 所提不要关闭套接字 但是不关闭的话,浏览器不知道发完没有啊 此时用到header的属性Content ...

  6. 图数据库 Nebula Graph 在 Boss 直聘的应用

    本文首发于 Nebula Graph 官方博客:https://nebula-graph.com.cn/posts/nebula-graph-risk-control-boss-zhipin/ 摘要: ...

  7. Windows 上安装 PostgreSQL

    PostgreSQL官网–>Download–>Windows 64位,如图所示: (1)官网: https://www.postgresql.org/ (2)Download: http ...

  8. 简析5G时代的MART流处理

    在当今数字驱动的世界中,实时处理数据流是业务成功的必要条件. 5G网络的引入增加了对数据量和速要求,而这些要求给传统的数据架构带来了压力.对吸收数据流量的需求空前增长,同时还要通过跨多个数据流,做出智 ...

  9. Python之猜拳游戏

    第一次写这东西,主要是为了记录自己的学习历程,或者说是为了忘记的时候找回来看看. 今天是参加风变编程培训第10天.昨天晚上完成了第10关关底的猜拳小游戏. 要求:人和电脑轮流出拳.判断输赢. 给出列表 ...

  10. Xtrabackup备份与恢复

    一.Xtrabackup介绍 MySQL冷备.mysqldump.MySQL热拷贝都无法实现对数据库进行增量备份.在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况 ...