對文件內容進行叠代
阿新 • • 發佈:2018-01-28
port font atime lose 1.7 read test body 程序 #前面了解了文件的基本操作方法。在實際應用中,對文件內容進行叠代和重復執行操作是比較常見的操作。
#所謂叠代,是指不斷重復某一個動作,直到這些動作都完成為止。
1、按字節處理
#在while循環中,read方法是最常見的對文件內容進行叠代的方法,例如:
1 #!/usr/bin/python3 2 #-*-coding:UTF-8-*- 3 #file_while 4 5 path=‘./test.txt‘ 6 f_name=open(path,‘w‘) 7 print(‘write length:‘,f_name.write(‘Hello‘)) 8 f_name=open(path)#執行結果如下:9 c_str=f_name.read(1) 10 while c_str: 11 print(‘read str is:‘,c_str) 12 c_str=f_name.read(1) 13 f_name.close()
1 D:\Python\workspace\datatime\20180116>python file_while.py 2 write length: 5 3 read str is: H 4 read str is: e 5 read str is: l 6 read str is: l 7 read str is: o#由執行結果看到,該示例對寫入文件的每個字符都進行了循環了。這個程序運行到文件末尾時,read方法會返回一個空字符串,未執行到空字符串前,返回的都是非空字符串,表示布爾值為真。 #該示例中出現了代碼的重復使用,可以使用while true/break語句結構進一步優化。優化代碼如下:
1#由代碼結構看到,更改後的代碼比之前更好。 2、按行操作 #在實際操作中,處理文件時可能需要對文件的行進行叠代,而不是單個字符。此時可以使用和處理字符一樣的方式,只不過要使用readline方法,例如:#!/usr/bin/python3 2 #-*-coding:UTF-8-*- 3 #file_while 4 5 path=‘./test.txt‘ 6 7 f_name=open(path) 8 while True: 9 c_str=f_name.read(1) 10 if not c_str: 11 break 12 print(‘read str is:‘,c_str) 13 f_name.close()
1#使用該方式得到的是按行讀取的字符。 3、使用fileinput實現懶加載式叠代 #我們前面了解了read方法和readline方法,這兩個方法不帶參數時將度組文件中所有內容,然後加載到內存中。當文件很大時,使用這個方式會占用太多內存,甚至直接使內存溢出(內存不夠),從而導致執行失敗。這種情況下,我們可以考慮使用while循環和readline方法代替這些方法。 #在Python中,for循環是優先考慮的選擇,使用for循環意味著可以對任何進行分隔操作,而不是一步到位。 #按行讀取時,若能使用for循環,則稱之為懶加載式叠代,因為在操作過程中只讀取實際需要的文件部分。使用fileinput需要導入fileinput模塊,例如:#!/usr/bin/python3 2 #-*-coding:UTF-8-*- 3 #叠代_readline 4 5 path=‘./test.txt‘ 6 7 f_name=open(path) 8 while True: 9 line=f_name.readline(1) 10 if not line: 11 break 12 print(‘read line is:‘,line) 13 f_name.close()
1 #!/usr/bin/python3 2 #-*-condig:UTF-8-*- 3 #fileinput 4 5 import fileinput 6 for line in fileinput.input(path): 7 print(‘line is‘,line)#在該示例中沒有看到文件的打開和關閉操作,是怎麽處理文件的呢?其實這些操作被封裝在input方法內部了。 4、文件叠代器 #從Python2.2版本開始,文件對象是可叠代的,這意味著可以直接在for循環中使用文件對象,從而進行叠代,例如:
1 #!/usr/bin/python3 2 #-*-coding:UTF-8-*- 3 #文件叠代器 4 5 path=‘./test.txt‘ 6 7 f_name=open(path) 8 for line in f_name: 9 print(‘line is:‘,line) 10 f_name.close()#該示例使用for循環對文件對象進行叠代,記住叠代結束後的文件要顯式關閉。
對文件內容進行叠代