標籤:內容 重新整理 file res div 指定位置 Null 字元串 print 部分
一、file讀檔案
讀寫檔案是最常見的IO操作。Python內建了讀寫檔案的函數。在磁碟上讀寫檔案的功能都是由作業系統提供的,現代作業系統不允許普通的程式直接操作磁碟,所以,讀寫檔案就是請求作業系統開啟一個檔案對象(通常稱為檔案描述符),然後,通過作業系統提供的介面從這個檔案對象中讀取資料(讀檔案),或者把資料寫入這個檔案對象(寫檔案)。
讀檔案需要三個步驟:
1.要以讀檔案的模式開啟一個檔案對象,使用Python內建的open()函數,傳入檔案名稱和標示符。標示符‘r‘表示讀。如果檔案不存在,open()函數就會拋出一個IOError的錯誤,並且給出錯誤碼和詳細的資訊告訴你檔案不存在
2.如果檔案開啟成功,接下來,調用read()方法可以一次讀取檔案的全部內容,Python把內容讀到記憶體,用一個str對象表示
3.最後一步是調用close()方法關閉檔案。檔案使用完畢後必須關閉,因為檔案對象會佔用作業系統的資源,並且作業系統同一時間能開啟的檔案數量也是有限的。
程式碼如下:
import codecsf = codecs.open(‘1.txt‘,‘r‘)print (f.read())f.close()
註:codecs模組:主要用來解決檔案亂碼的問題
程式運行結果:
讀取檔案後,對檔案進行操作,程式碼如下:
import codecsf = codecs.open(‘1.txt‘)text = f.read()print(type(text))result = text.replace(‘1‘,‘A‘)print (result)f.close()
程式運行結果如下:
二、file寫檔案
寫檔案和讀檔案是一樣的,唯一區別是調用open()函數時,傳入標識符‘w‘或者‘wb‘表示寫文字檔或寫二進位檔案。可以反覆調用write()來寫入檔案,但是務必要調用f.close()來關閉檔案。當我們寫檔案時,作業系統往往不會立刻把資料寫入磁碟,而是放到記憶體緩衝起來,閒置時候再慢慢寫入。只有調用close()方法時,作業系統才保證把沒有寫入的資料全部寫入磁碟。忘記調用close()的後果是資料可能唯寫了一部分到磁碟,剩下的丟失了。程式碼如下:
import codecsf = codecs.open(‘2.txt‘,‘wb‘)f.write(‘hello world\n‘)f.write(‘gggdgdsd\n‘)f.write(‘huangdongju\n‘)f.write(‘hello {0}\n‘.format(‘momo‘))f.write(‘hello %s\n‘%‘huangodngju‘)f.close()
程式運行結果如下:
三、file常用的方法
1.readlines():用於讀取所有行(直到結束符 EOF)並返回列表,該列表可以由 Python 的 for... in ... 結構進行處理。如果碰到結束符 EOF 則返回Null 字元串。返回list,每一行作為list的單個元素。程式碼如下:
import codecsf = codecs.open(‘2.txt‘,‘rb‘)text_list = f.readlines()print (type(text_list))print(text_list)print (text_list[0])f.close()
程式運行結果如下:
2.readline():用於從檔案讀取整行,包括 "\n" 字元。如果指定了一個非負數的參數,則返回指定大小的位元組數,包括 "\n" 字元。
next():返回迭代器的下一個項目
程式碼如下:
import codecsf = codecs.open(‘2.txt‘,‘rb‘)print (f.readline())print (f.next())f.close()
程式運行結果:
3.write():用於向檔案中寫入指定字串。
writelines():用於向檔案中寫入一序列的字串。
程式碼如下:
import codecsf = codecs.open(‘3.txt‘,‘wb‘)f.write(‘huangdongju\nmomo\n11111\n‘)f.writelines([‘aaaaa\n‘,‘bbbbb\n‘,‘ccccc\n‘])f.close()
程式運行結果:
4.tell():tell() 方法返迴文件的當前位置,即檔案指標當前位置。程式碼如下:
import codecsfile = codecs.open(‘4.txt‘,‘wb‘)file.write(‘helloworld!\nhuangdongju\n‘)print(file.tell())file.writelines([‘aaaaa\n‘,‘bbbbb\n‘,‘ccccc\n‘])print (file.tell())file.close()
程式運行結果如下:
5.seek():seek() 方法用於移動檔案讀取指標到指定位置。程式碼如下:
import codecsfile = codecs.open(‘4.txt‘,‘wb‘)file.write(‘helloworld!\nhuangdongju\n‘)print(file.tell())file.writelines([‘aaaaa\n‘,‘bbbbb\n‘,‘ccccc\n‘])print (file.tell())file.seek(0)file.write(‘all or nothing,now or never‘)file.close()
程式運行結果:
5.name屬性:讀取檔案名稱
closed屬性:關閉檔案流返回true,未關閉返回false
6.flush():flush() 方法是用來重新整理緩衝區的,即將緩衝區中的資料立刻寫入檔案,同時清空緩衝區,不需要是被動的等待輸出緩衝區寫入。一般情況下,檔案關閉後會自動重新整理緩衝區,但有時你需要在關閉前重新整理它,這時就可以使用 flush() 方法。
四、file中with的用法
在使用檔案的時候,經常會忘記關閉檔案流,使用with語句可以避免這種情況的發生。程式碼如下:
import codecswith codecs.open(‘1.txt‘,‘rb‘) as file: print (file.read()) print (file.closed)print (file.closed)
程式運行結果:
列印檔案的行號與內容,程式碼如下:
import codecswith codecs.open(‘1.txt‘,‘rb‘) as ff: for line, value in enumerate(ff): print (line, value)
程式運行結果如下:
制定行輸出,程式碼如下:
import codecsimport linecachewith codecs.open(‘1.txt‘,‘rb‘) as ff: for line, value in enumerate(ff): if line == 4-1: print (value)count = linecache.getline(‘1.txt‘,4)print (count)
程式運行結果:
python的檔案操作