1. 程式人生 > >對文件內容進行叠代

對文件內容進行叠代

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
#!/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()
#由代碼結構看到,更改後的代碼比之前更好。 2、按行操作 #在實際操作中,處理文件時可能需要對文件的行進行叠代,而不是單個字符。此時可以使用和處理字符一樣的方式,只不過要使用readline方法,例如:
 1
#!/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()
#使用該方式得到的是按行讀取的字符。 3、使用fileinput實現懶加載式叠代 #我們前面了解了read方法和readline方法,這兩個方法不帶參數時將度組文件中所有內容,然後加載到內存中。當文件很大時,使用這個方式會占用太多內存,甚至直接使內存溢出(內存不夠),從而導致執行失敗。這種情況下,我們可以考慮使用while循環和readline方法代替這些方法。 #在Python中,for循環是優先考慮的選擇,使用for循環意味著可以對任何進行分隔操作,而不是一步到位。 #按行讀取時,若能使用for循環,則稱之為懶加載式叠代,因為在操作過程中只讀取實際需要的文件部分。使用fileinput需要導入fileinput模塊,例如:
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循環對文件對象進行叠代,記住叠代結束後的文件要顯式關閉。

對文件內容進行叠代