欢迎加入QQ讨论群258996829
麦子学院 头像
苹果6袋
6
麦子学院

Python学习之fileinput模块详解

发布时间:2017-10-10 08:45  回复:0  查看:4259   最后回复:2017-10-10 08:45  

本文和大家分享的主要是python的fileinput模块相关内容,一起来看看吧,希望对大家学习python有所帮助。

  fileinput模块

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

  files:                  #文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]

  inplace:                #是否将标准输出的结果写回文件,默认不取代

  backup:                 #备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。

  bufsize:                #缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可

  mode:                   #读写模式,默认为只读

  openhook:               #该钩子用于控制打开的所有文件,比如说编码方式等;

  fileinput模块提供处理一个或多个文本文件的功能,可以通过使用for循环来读取一个或多个文本文件的所有行。

  它的工作方式和readlines很类似,不同点在于它不是将全部的行读到列表中而是创建了一个xreadlines对象。

  关键在这句话:标准输出会被重定向到打开文件

  所以一定要用print打印到标准输出,fileinput会自动把标准输出内容回写到文件,如果没有用print打印到标准输出,那么就会把空内容回写到文件,也就是清除了文件所有内容

  print re_basedir.sub('basedir=/usr/local/mysql', line) ,

  下面是fileinput模块中的常用函数:

  input()    #返回能够用于for循环遍历的对象

  filename()  #返回当前文件的名称

  lineno()   #返回当前已经读取的行的数量(或者序号)

  filelineno() #返回当前读取的行的行号

  isfirstline() #检查当前行是否是文件的第一行

  示例

  #如果要修改多个地方,将sub()得到的结果代入第二个sub()函数再print出来

  def modify_startupscript(port):

  for line in fileinput.input(MYSQL_STARTUP_SCRIPT,inplace=1):

  re_datadir = re.compile(r'datadir=', re.I | re.M)

  content= re_datadir.sub('datadir=/data/mysql/mysql%s/data' %port, line)

  re_basedir = re.compile(r'basedir=', re.I | re.M)

  print re_basedir.sub('basedir=/usr/local/mysql', content) ,

  fileinput.close()

  示例

  #!/usr/bin/env python

  import fileinputfor line in fileinput.input('test.txt',backup='.bak',inplace=1):

  print line.replace('Python','LinuxEye'),

  fileinput.close()

  示例

  判断是否是第一行

  import fileinputfor line in fileinput.input('test.txt'):

  if fileinput.isfirstline():

  print line,

  else:

  break

  fileinput.close()

  示例

  import fileinputfrom glob import globfor line in fileinput.input(glob(r'd:/*.txt')):

  print fileinput.lineno(), u'文件:', fileinput.filename(), /

  u'行号:', fileinput.filelineno(), u'长度:', len(line.strip('/n'))

  fileinput.close()

 

 

来源:博客园

您还未登录,请先登录

热门帖子

最新帖子