python的文件操作
一、file讀文件
讀寫文件是最常見的IO操作。Python內置了讀寫文件的函數。在磁盤上讀寫文件的功能都是由操作系統提供的,現代操作系統不允許普通的程序直接操作磁盤,所以,讀寫文件就是請求操作系統打開一個文件對象(通常稱為文件描述符),然後,通過操作系統提供的接口從這個文件對象中讀取數據(讀文件),或者把數據寫入這個文件對象(寫文件)。
讀文件需要三個步驟:
1.要以讀文件的模式打開一個文件對象,使用Python內置的open()函數,傳入文件名和標示符。標示符‘r‘表示讀。如果文件不存在,open()函數就會拋出一個IOError的錯誤,並且給出錯誤碼和詳細的信息告訴你文件不存在
2.如果文件打開成功,接下來,調用read()方法可以一次讀取文件的全部內容,Python把內容讀到內存,用一個str對象表示
3.最後一步是調用close()方法關閉文件。文件使用完畢後必須關閉,因為文件對象會占用操作系統的資源,並且操作系統同一時間能打開的文件數量也是有限的。
程序代碼如下:
import codecs f = codecs.open(‘1.txt‘,‘r‘) print (f.read()) f.close()
註:codecs模塊:主要用來解決文件亂碼的問題
程序運行結果:
讀取文件後,對文件進行操作,程序代碼如下:
import codecs f= 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 codecs f = 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 則返回空字符串。返回list,每一行作為list的單個元素。程序代碼如下:
import codecs f = 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 codecs f = codecs.open(‘2.txt‘,‘rb‘) print (f.readline()) print (f.next()) f.close()
程序運行結果:
3.write():用於向文件中寫入指定字符串。
writelines():用於向文件中寫入一序列的字符串。
程序代碼如下:
import codecs f = 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 codecs file = 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 codecs file = 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 codecs with codecs.open(‘1.txt‘,‘rb‘) as file: print (file.read()) print (file.closed) print (file.closed)
程序運行結果:
打印文件的行號與內容,程序代碼如下:
import codecs with codecs.open(‘1.txt‘,‘rb‘) as ff: for line, value in enumerate(ff): print (line, value)
程序運行結果如下:
制定行輸出,程序代碼如下:
import codecs import linecache with 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的文件操作