fileinput子產品讓你輕松周遊文本檔案的所有行,與readlines()不同的是fileinput子產品是逐行進行周遊,而readlines是一次讀取全部到記憶體中. 使用python script.py file1.txt file2.txt ...基本使用方法如下:
import fileinput for line in fileinput.input(): process(line)
fileinput中重要的函數: 1.input(files[,inplace,[backup]]):周遊多個輸入的檔案.inplace設定為True的時候直接在源檔案中修改,backup參數将檔案名擴充到通過原始檔案建立的備份檔案中,input=1類似于sed -i參數 2.filename():傳回目前檔案的名稱 3.lineno():傳回目前累計的行數 4.filelineno():傳回目前檔案的行數 5.isfirstline():檢查目前行是否是檔案的第一行 6.isstdin():檢查最後一行是否來至sys.stdin 7.nextfile():關閉目前檔案,移動到下一個檔案,這在逐個檔案進行處理的時候可能很有用 8.close():關閉序列 下面這個是書上的例子,在檔案每一行的末尾添加一個#行号
[[email protected] ~]# cat 1.py #!/usr/bin/env python import fileinput import os for line in fileinput.input(inplace=1,backup='.bak'): line=line.rstrip() num=fileinput.lineno() print '%-80s # %2i' % (line,num)
解釋一下,inplace=1說明直接在源檔案進行修改,backup='.bak'說明在修改之前會将源檔案備份,檔案名我源檔案名.bak line.rstrip()是将每行的末尾的空格删除 fileinput.lineno()是記錄目前處理的行 %-80s的意思是左對齊,寬度為80,如果行的長度不滿80則最後以空格填充,如果滿80則傳回全部資料 %2i的意思是寬度為2的整形 下面是具體的處理結果:
[[email protected] ~]# cat 1.txt Traceback (most recent call last): File "./1.py", line 10, in <module> print a[i] IndexError: list index out of range [[email protected] ~]# ./1.py 1.txt [[email protected] ~]# cat 1.txt Traceback (most recent call last): # 1 File "./1.py", line 10, in <module> # 2 print a[i] # 3 IndexError: list index out of range # 4 [[email protected] ~]# ls 1.txt* 1.txt 1.txt.bak [[email protected] ~]# cat 1.txt.bak Traceback (most recent call last): File "./1.py", line 10, in <module> print a[i] IndexError: list index out of range