python文件處理之fileinput


一、介紹

fileinput模塊可以對一個或多個文件中的內容進行迭代、遍歷等操作,我們常用的open函數是對一個文件進行讀寫操作。

fileinput模塊的input()函數比open函數更高效和好用,體現在:

  1. input()函數生成一個迭代器,保證了在遇到大文件的讀取時不會占用太大的內存。
  2. 用fileinput對文件進行循環遍歷,格式化輸出,查找、替換等操作,還能獲取每一行的行號等等,非常方便。

 

二、fileinput讀取文件函數input的使用格式

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

files:         # 文件的路徑列表,默認是stdin方式,多文件['1.txt','2.txt',...]
inplace:       # 是否將標准輸出的結果寫回文件,默認不取代
backup:        # 備份文件的擴展名,只指定擴展名,如.bak。如果該文件的備份文件已存在,則會自動覆蓋。
bufsize:       # 緩沖區大小,默認為0,如果文件很大,可以修改此參數,一般默認即可
mode:      # 讀寫模式,默認為只讀
openhook:    # 該鈎子用於控制打開的所有文件,比如說編碼方式等;

 

三、fileinput中的常用函數

函數 描述
input([files[, inplace[, backup]]])  幫助迭代多個輸入流中的行
filename()  返回當前文件的名稱
lineno()   返回(累計的)當前行號
filelineno() 返回在當前文件中的行號
isfirstline() 檢查當前行是否是文件中的第一行
isstdin() 檢查最后一行是否來自sys.stdin
nextfile() 關閉當前文件並移到下一個文件
close()   關閉序列

fileinput.input是最重要的函數,它返回一個迭代器對象,如果要處理多個文件,可以向這個函數提供一個或多個文件名。

還可將參數inplace設置為True(inplace=True),對於你訪問的每一行,都需打印出替代內容,這些內容將被寫回到當前輸入文件中,此時可選參數backup用於給從原始文件創建的備份文件指定擴展名。

 

四、示例

1、讀取多個文件

# a.txt文件的內容
"""
我
是
好
人
"""

# b.txt文件的內容
"""
他
是
壞
人
"""

# 讀取一個文件
for line in fileinput.input("a.txt"):
    print(line)


# 讀取多個文件
for line in fileinput.input(["a.txt", "b.txt"]):
    print(line)

 

2、修改文件並備份原文件

# -*_ coding:utf-8 -*-
import fileinput


for line in fileinput.input("a.txt", backup=".bak", inplace=True):
    line = line.replace("", "小明")
    print(line)

# 結果
當前文件夾會生成a.txt.bak文件,內容是之前的內容,
而a.txt文件已經被修改了,把""變成了"小明"

 

3、輸出當前行號和行內容

# -*_ coding:utf-8 -*-
import fileinput

for line in fileinput.input("a.txt"):
    lineno = fileinput.filelineno()
    print lineno, line

# 結果
123 好、
4 人

 

4、輸出文件名

# -*_ coding:utf-8 -*-
import fileinput

for line in fileinput.input("a.txt"):
    # 在第一行前面先輸出文件名
    if fileinput.isfirstline():
        print fileinput.filename()
    print line


# 結果
a.txt
我
是
好、
人

其他函數,都是類似的使用方法,這里就不全部介紹了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM