最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python fileinput模塊使用實(shí)例

 更新時(shí)間:2015年06月03日 11:26:02   投稿:junjie  
這篇文章主要介紹了Python fileinput模塊使用實(shí)例,本文講解了典型用法、基本格式、默認(rèn)格式、常用函數(shù)和常見例子等內(nèi)容,需要的朋友可以參考下

fileinput模塊可以對一個(gè)或多個(gè)文件中的內(nèi)容進(jìn)行迭代、遍歷等操作。
該模塊的input()函數(shù)有點(diǎn)類似文件readlines()方法,區(qū)別在于:
前者是一個(gè)迭代對象,即每次只生成一行,需要用for循環(huán)迭代。
后者是一次性讀取所有行。在碰到大文件的讀取時(shí),前者無疑效率更高效。
用fileinput對文件進(jìn)行循環(huán)遍歷,格式化輸出,查找、替換等操作,非常方便。

【典型用法】

復(fù)制代碼 代碼如下:

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

【基本格式】

復(fù)制代碼 代碼如下:

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

【默認(rèn)格式】
復(fù)制代碼 代碼如下:

fileinput.input (files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)
files:                  #文件的路徑列表,默認(rèn)是stdin方式,多文件['1.txt','2.txt',...] 
inplace:                #是否將標(biāo)準(zhǔn)輸出的結(jié)果寫回文件,默認(rèn)不取代 
backup:                 #備份文件的擴(kuò)展名,只指定擴(kuò)展名,如.bak。如果該文件的備份文件已存在,則會(huì)自動(dòng)覆蓋。 
bufsize:                #緩沖區(qū)大小,默認(rèn)為0,如果文件很大,可以修改此參數(shù),一般默認(rèn)即可 
mode:                   #讀寫模式,默認(rèn)為只讀 
openhook:               #該鉤子用于控制打開的所有文件,比如說編碼方式等; 

【常用函數(shù)】
復(fù)制代碼 代碼如下:

fileinput.input()       #返回能夠用于for循環(huán)遍歷的對象 
fileinput.filename()    #返回當(dāng)前文件的名稱 
fileinput.lineno()      #返回當(dāng)前已經(jīng)讀取的行的數(shù)量(或者序號) 
fileinput.filelineno()  #返回當(dāng)前讀取的行的行號 
fileinput.isfirstline() #檢查當(dāng)前行是否是文件的第一行 
fileinput.isstdin()     #判斷最后一行是否從stdin中讀取 
fileinput.close()       #關(guān)閉隊(duì)列 

【常見例子】

例子01: 利用fileinput讀取一個(gè)文件所有行

復(fù)制代碼 代碼如下:

>>> import fileinput 
>>> for line in fileinput.input('data.txt'): 
        print line, 
#輸出結(jié)果 
Python 
Java  
C/C++ 
Shell 

命令行方式:

復(fù)制代碼 代碼如下:

#test.py 
import fileinput 
 
for line in fileinput.input(): 
    print fileinput.filename(),'|','Line Number:',fileinput.lineno(),'|: ',line 
 
c:>python test.py data.txt 
data.txt | Line Number: 1 |:  Python 
data.txt | Line Number: 2 |:  Java 
data.txt | Line Number: 3 |:  C/C++ 
data.txt | Line Number: 4 |:  Shell 

例子02: 利用fileinput對多文件操作,并原地修改內(nèi)容

復(fù)制代碼 代碼如下:

#test.py 
#---樣本文件--- 
c:\Python27>type 1.txt 
first 
second 
 
c:\Python27>type 2.txt 
third 
fourth 
#---樣本文件--- 
import fileinput 
 
def process(line): 
    return line.rstrip() + ' line' 
 
for line in fileinput.input(['1.txt','2.txt'],inplace=1): 
    print process(line) 
 
#---結(jié)果輸出--- 
c:\Python27>type 1.txt 
first line 
second line 
 
c:\Python27>type 2.txt 
third line 
fourth line 
#---結(jié)果輸出--- 

命令行方式:

復(fù)制代碼 代碼如下:

#test.py 
import fileinput 
 
def process(line): 
    return line.rstrip() + ' line' 
 
for line in fileinput.input(inplace = True): 
    print process(line) 
 
#執(zhí)行命令 
c:\Python27>python test.py 1.txt 2.txt 

例子03: 利用fileinput實(shí)現(xiàn)文件內(nèi)容替換,并將原文件作備份

復(fù)制代碼 代碼如下:

#樣本文件: 
#data.txt 
Python 
Java 
C/C++ 
Shell 
 
#FileName: test.py 
import fileinput 
 
for line in fileinput.input('data.txt',backup='.bak',inplace=1): 
    print line.rstrip().replace('Python','Perl')  #或者print line.replace('Python','Perl'), 
     
#最后結(jié)果: 
#data.txt 
Python 
Java 
C/C++ 
Shell 
#并生成: 
#data.txt.bak文件 

復(fù)制代碼 代碼如下:

#其效果等同于下面的方式 
import fileinput 
for line in fileinput.input(): 
    print 'Tag:',line, 
 
 
#---測試結(jié)果:    
d:\>python Learn.py < data.txt > data_out.txt 

例子04: 利用fileinput將CRLF文件轉(zhuǎn)為LF

復(fù)制代碼 代碼如下:

import fileinput 
import sys 
 
for line in fileinput.input(inplace=True): 
    #將Windows/DOS格式下的文本文件轉(zhuǎn)為Linux的文件 
    if line[-2:] == "\r\n":   
        line = line + "\n" 
    sys.stdout.write(line) 

例子05: 利用fileinput對文件簡單處理

復(fù)制代碼 代碼如下:

#FileName: test.py 
import sys 
import fileinput 
 
for line in fileinput.input(r'C:\Python27\info.txt'): 
    sys.stdout.write('=> ') 
    sys.stdout.write(line) 
 
#輸出結(jié)果    
>>>  
=> The Zen of Python, by Tim Peters 
=>  
=> Beautiful is better than ugly. 
=> Explicit is better than implicit. 
=> Simple is better than complex. 
=> Complex is better than complicated. 
=> Flat is better than nested. 
=> Sparse is better than dense. 
=> Readability counts. 
=> Special cases aren't special enough to break the rules. 
=> Although practicality beats purity. 
=> Errors should never pass silently. 
=> Unless explicitly silenced. 
=> In the face of ambiguity, refuse the temptation to guess. 
=> There should be one-- and preferably only one --obvious way to do it. 
=> Although that way may not be obvious at first unless you're Dutch. 
=> Now is better than never. 
=> Although never is often better than *right* now. 
=> If the implementation is hard to explain, it's a bad idea. 
=> If the implementation is easy to explain, it may be a good idea. 
=> Namespaces are one honking great idea -- let's do more of those! 

例子06: 利用fileinput批處理文件

復(fù)制代碼 代碼如下:

#---測試文件: test.txt test1.txt test2.txt test3.txt--- 
#---腳本文件: test.py--- 
import fileinput 
import glob 
 
for line in fileinput.input(glob.glob("test*.txt")): 
    if fileinput.isfirstline(): 
        print '-'*20, 'Reading %s...' % fileinput.filename(), '-'*20 
    print str(fileinput.lineno()) + ': ' + line.upper(), 
     
     
#---輸出結(jié)果: 
>>>  
-------------------- Reading test.txt... -------------------- 
1: AAAAA 
2: BBBBB 
3: CCCCC 
4: DDDDD 
5: FFFFF 
-------------------- Reading test1.txt... -------------------- 
6: FIRST LINE 
7: SECOND LINE 
-------------------- Reading test2.txt... -------------------- 
8: THIRD LINE 
9: FOURTH LINE 
-------------------- Reading test3.txt... -------------------- 
10: THIS IS LINE 1 
11: THIS IS LINE 2 
12: THIS IS LINE 3 
13: THIS IS LINE 4 

例子07: 利用fileinput及re做日志分析: 提取所有含日期的行

復(fù)制代碼 代碼如下:

#--樣本文件-- 
aaa 
1970-01-01 13:45:30  Error: **** Due to System Disk spacke not enough... 
bbb 
1970-01-02 10:20:30  Error: **** Due to System Out of Memory... 
ccc 
 
#---測試腳本--- 
import re 
import fileinput 
import sys 
 
pattern = '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}' 
 
for line in fileinput.input('error.log',backup='.bak',inplace=1): 
    if re.search(pattern,line): 
        sys.stdout.write("=> ") 
        sys.stdout.write(line) 
 
#---測試結(jié)果--- 
=> 1970-01-01 13:45:30  Error: **** Due to System Disk spacke not enough... 
=> 1970-01-02 10:20:30  Error: **** Due to System Out of Memory... 

例子08: 利用fileinput及re做分析: 提取符合條件的電話號碼

復(fù)制代碼 代碼如下:

#---樣本文件: phone.txt--- 
010-110-12345 
800-333-1234 
010-99999999 
05718888888 
021-88888888 
 
#---測試腳本: test.py--- 
import re 
import fileinput 
 
pattern = '[010|021]-\d{8}'  #提取區(qū)號為010或021電話號碼,格式:010-12345678 
 
for line in fileinput.input('phone.txt'): 
    if re.search(pattern,line): 
        print '=' * 50 
        print 'Filename:'+ fileinput.filename()+' | Line Number:'+str(fileinput.lineno())+' | '+line, 
 
#---輸出結(jié)果:--- 
>>>  
================================================== 
Filename:phone.txt | Line Number:3 | 010-99999999 
================================================== 
Filename:phone.txt | Line Number:5 | 021-88888888 
>>>  

例子09: 利用fileinput實(shí)現(xiàn)類似于grep的功能

復(fù)制代碼 代碼如下:

import sys 
import re 
import fileinput 
 
pattern= re.compile(sys.argv[1]) 
for line in fileinput.input(sys.argv[2]): 
    if pattern.match(line): 
        print fileinput.filename(), fileinput.filelineno(), line 
$ ./test.py import.*re *.py 
#查找所有py文件中,含import re字樣的 
addressBook.py  2   import re 
addressBook1.py 10  import re 
addressBook2.py 18  import re 
test.py         238 import re 

例子10: 利用fileinput做正則替換

復(fù)制代碼 代碼如下:

#---測試樣本: input.txt 
* [Learning Python](#author:Mark Lutz) 
     
#---測試腳本: test.py 
import fileinput 
import re 
  
for line in fileinput.input(): 
    line = re.sub(r'\*
(.∗)
#(.*)', r'<h2 id="\2">\1</h2>', line.rstrip()) 
    print(line) 
 
#---輸出結(jié)果: 
c:\Python27>python test.py input.txt 
<h2 id="author:Mark Lutz">Learning Python</h2> 

例子11: 利用fileinput做正則替換,不同字模塊之間的替換

復(fù)制代碼 代碼如下:

#---測試樣本:test.txt 
[@!$First]&[*%-Second]&[Third] 
 
#---測試腳本:test.py 
import re 
import fileinput 
 
regex = re.compile(r'^([^&]*)(&)([^&]*)(&)([^&]*)') 
#整行以&分割,要實(shí)現(xiàn)[@!$First]與[*%-Second]互換 
for line in fileinput.input('test.txt',inplace=1,backup='.bak'): 
    print regex.sub(r'\3\2\1\4\5',line), 
 
#---輸出結(jié)果: 
[*%-Second]&[@!$First]&[Third] 

例子12: 利用fileinput根據(jù)argv命令行輸入做替換

復(fù)制代碼 代碼如下:

#---樣本數(shù)據(jù): host.txt 
# localhost is used to configure the loopback interface 
# when the system is booting.  Do not change this entry. 
127.0.0.1      localhost 
192.168.100.2  www.test2.com 
192.168.100.3  www.test3.com 
192.168.100.4  www.test4.com 
 
#---測試腳本: test.py 
import sys 
import fileinput 
 
source = sys.argv[1] 
target = sys.argv[2] 
files  = sys.argv[3:] 
 
for line in fileinput.input(files,backup='.bak',openhook=fileinput.hook_encoded("gb2312")): 
    #對打開的文件執(zhí)行中文字符集編碼 
    line = line.rstrip().replace(source,target) 
    print line 
     
#---輸出結(jié)果:     
c:\>python test.py 192.168.100 127.0.0 host.txt 
#將host文件中,所有192.168.100轉(zhuǎn)換為:127.0.0 
127.0.0.1  localhost 
127.0.0.2  www.test2.com 
127.0.0.3  www.test3.com 
127.0.0.4  www.test4.com 

相關(guān)文章

  • python3排序的實(shí)例方法

    python3排序的實(shí)例方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python3排序的實(shí)例方法,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-10-10
  • python批量修改xml文件中的信息

    python批量修改xml文件中的信息

    大家好,本篇文章主要講的是python批量修改xml文件中的信息,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下的相關(guān)資料
    2022-01-01
  • Python安裝Numpy出現(xiàn)異常信息簡單解決辦法

    Python安裝Numpy出現(xiàn)異常信息簡單解決辦法

    在安裝Python的Numpy包時(shí),可能會(huì)遇到路徑警告或包源超時(shí)的問題,首先,如果出現(xiàn)包源超時(shí),可以嘗試更換為國內(nèi)的鏡像源,如清華大學(xué)鏡像源,其次,如果在安裝完成后提示將某個(gè)路徑添加到PATH環(huán)境變量,按照提示操作即可消除異常,需要的朋友可以參考下
    2024-09-09
  • Python繪制七段數(shù)碼管實(shí)例代碼

    Python繪制七段數(shù)碼管實(shí)例代碼

    這篇文章主要介紹了Python繪制七段數(shù)碼管實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Python處理RSS、ATOM模塊FEEDPARSER介紹

    Python處理RSS、ATOM模塊FEEDPARSER介紹

    這篇文章主要介紹了Python處理RSS、ATOM模塊FEEDPARSER介紹,本文只是做個(gè)入門級的簡潔介紹,需要的朋友可以參考下
    2015-02-02
  • python 參數(shù)列表中的self 顯式不等于冗余

    python 參數(shù)列表中的self 顯式不等于冗余

    Self in the Argument List: Redundant is not Explicit
    2008-12-12
  • 淺談pycharm出現(xiàn)卡頓的解決方法

    淺談pycharm出現(xiàn)卡頓的解決方法

    今天小編就為大家分享一篇淺談pycharm出現(xiàn)卡頓的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • tensorflow求導(dǎo)和梯度計(jì)算實(shí)例

    tensorflow求導(dǎo)和梯度計(jì)算實(shí)例

    今天小編就為大家分享一篇tensorflow求導(dǎo)和梯度計(jì)算實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python面向?qū)ο笾接袑傩院退接蟹椒☉?yīng)用案例分析

    Python面向?qū)ο笾接袑傩院退接蟹椒☉?yīng)用案例分析

    這篇文章主要介紹了Python面向?qū)ο笾接袑傩院退接蟹椒?結(jié)合具體案例形式簡單分析了面向?qū)ο蟪绦蛟O(shè)計(jì)中私有屬性與私有方法的基本功能與使用注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • Anaconda安裝pytorch及配置PyCharm 2021環(huán)境

    Anaconda安裝pytorch及配置PyCharm 2021環(huán)境

    小編使用的是python3.8版本,為了防止訪問量過大導(dǎo)致http連接失敗,所以采用本地安裝,具體安裝方法本文給大家詳細(xì)介紹,在文章底部給大家提到了PyCharm 2021配置環(huán)境的方法,感興趣的朋友一起看看吧
    2021-06-06

最新評論

忻城县| 日土县| 虹口区| 射阳县| 比如县| 公主岭市| 隆昌县| 林西县| 东光县| 桂平市| 罗平县| 平南县| 虞城县| 安丘市| 常山县| 吴江市| 汽车| 巴楚县| 黄龙县| 连平县| 蒙城县| 汽车| 当雄县| 梓潼县| 锡林郭勒盟| 新郑市| 祁阳县| 呼玛县| 施秉县| 阿尔山市| 南郑县| 讷河市| 岳阳市| 缙云县| 汉中市| 通化县| 资阳市| 淳安县| 景德镇市| 梁河县| 安岳县|