歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Python學(xué)習(xí)之fileinput模塊詳解

發(fā)布時間:2017-10-10 08:45  回復(fù):0  查看:4422   最后回復(fù):2017-10-10 08:45  

本文和大家分享的主要是python的fileinput模塊相關(guān)內(nèi)容,一起來看看吧,希望對大家學(xué)習(xí)python有所幫助。

  fileinput模塊

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

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

  inplace:                #是否將標準輸出的結(jié)果寫回文件,默認不取代

  backup:                 #備份文件的擴展名,只指定擴展名,如.bak。如果該文件的備份文件已存在,則會自動覆蓋。

  bufsize:                #緩沖區(qū)大小,默認為0,如果文件很大,可以修改此參數(shù),一般默認即可

  mode:                   #讀寫模式,默認為只讀

  openhook:               #該鉤子用于控制打開的所有文件,比如說編碼方式等;

  fileinput模塊提供處理一個或多個文本文件的功能,可以通過使用for循環(huán)來讀取一個或多個文本文件的所有行。

  它的工作方式和readlines很類似,不同點在于它不是將全部的行讀到列表中而是創(chuàng)建了一個xreadlines對象。

  關(guān)鍵在這句話:標準輸出會被重定向到打開文件

  所以一定要用print打印到標準輸出,fileinput會自動把標準輸出內(nèi)容回寫到文件,如果沒有用print打印到標準輸出,那么就會把空內(nèi)容回寫到文件,也就是清除了文件所有內(nèi)容

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

  下面是fileinput模塊中的常用函數(shù):

  input()    #返回能夠用于for循環(huán)遍歷的對象

  filename()  #返回當前文件的名稱

  lineno()   #返回當前已經(jīng)讀取的行的數(shù)量(或者序號)

  filelineno() #返回當前讀取的行的行號

  isfirstline() #檢查當前行是否是文件的第一行

  示例

  #如果要修改多個地方,將sub()得到的結(jié)果代入第二個sub()函數(shù)再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()

 

 

來源:博客園

您還未登錄,請先登錄

熱門帖子

最新帖子

?