當我們用到大量的數據時,不可能將數據都寫入程式中,可以寫入文件里,在程式需要用到時,去讀取或者修改它。 讀寫文件 以讀文件的模式打開一個文件對象,使用內置函數open(),將會返回一個 file 對象,基本語法格式如下: 下麵是mode的一些參數,預設為r 只讀: 'r':以只讀方式打開文件(預設) ...
當我們用到大量的數據時,不可能將數據都寫入程式中,可以寫入文件里,在程式需要用到時,去讀取或者修改它。
讀寫文件
以讀文件的模式打開一個文件對象,使用內置函數open(),將會返回一個 file 對象,基本語法格式如下:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) Open file and return a stream. Raise IOError upon failure. open('C:\\***\\test.txt', mode)
下麵是mode的一些參數,預設為r 只讀:
'r':以只讀方式打開文件(預設)
'w':以寫入的方式打開文件,會覆蓋已存在的文件
'x':如果文件已經存在,使用此模式打開將引發異常
'a':以寫入模式打開,如果文件存在,則在末尾追加寫入
'b':以二進位模式打開文件
't':以文本模式打開(預設)
'+':可讀寫模式
'U':通用換行符支持
open(filename,w)為文件只用於寫入不可讀,如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
文件打開使用後要關閉文件,f.close()
文件對象方法
f.close():關閉文件
f.read(size=-1):從文件讀取size個字元,當未給定size或給定負值的時候,讀取剩餘的所有字元,然後作為字元串返回
f.readline():以寫入模式打開,如果文件存在,則在末尾追加寫入
f.write(str):將字元串str寫入文件
f.writelines(seq):向文件寫入字元串序列seq,seq應該是一個返回字元串的可迭代對象
f.seek(offset, from):在文件中移動文件指針,從from(0代表文件起始位置,1代表當前位置,偏移offset個位元組)
f.tell():返回當前在文件的位置
pickle模塊
pickle模塊實現了基本的序列化和反序列化
我們把變數從記憶體中變成可存儲或傳輸的過程稱之為序列化,
序列化之後,就可以把序列化後的內容寫入磁碟,或者通過網路傳輸到別的機器上。
反過來,把變數內容從序列化的對象重新讀到記憶體里稱之為反序列化,即unpickling。
import pickle pickle_file = open('C:\\***\\test.txt', 'wb') pickle.dump(obj, file[, protocol])
我們使用pickle.dump將一個對象序列化,然後寫入file。
然後關掉文件,pickle_file.close()
就將對象寫入了test.txt文件,以長期保存起來。
如果我們要使用test.txt文件中數據,需要用pickle.load()方法,將其反序列化出對象。
f = open('test.txt','rb') #只讀,以二進位模式打開test.txt文件 pickle_file = pickle.load(f) #反序列化出對象 f.close()
當打開的文件為空或不存在時會報錯:EOFError: Ran out of input。檢查是否輸入的文件名或路徑有誤。
這樣我們就從test.txt中反序列化出了對象 f,滿足了我們從文件中獲取數據的需求。