模式 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
讀 | + | + | + | + | ||
寫 | + | + | + | + | + | |
創建 | + | + | + | + | ||
覆蓋 | + | + | ||||
指針在開始 | + | + | + | + | ||
指針在結尾 | + | + |
創建讀寫的對象
f = open("./test.txt",'r')
f.readlines()
f.close #指的是關閉對象,釋放系統的資源
也可以使用with:
with open ("./test.txt" ,'r') as f:
f.readlines()
readline:指讀取一次讀取一行
readlines:一次讀取所有行,並返回列表
for line in f #也可以使用迭代
print(line,end = '')
f.write()
f.write(string) 將 string 寫入到文件中, 然后返回寫入的字符數。
必須寫入字符串,如果不是字符串,需要先轉成字符串再寫入
f.tell()
f.tell() 返回文件對象當前所處的位置, 它是從文件開頭開始算起的字節數。
f.seek()
如果要改變文件當前的位置, 可以使用 f.seek(offset, from_what) 函數。
from_what 的值, 如果是 0 表示開頭, 如果是 1 表示當前位置, 2 表示文件的結尾,例如:
- seek(x,0) : 從起始位置即文件首行首字符開始移動 x 個字符
- seek(x,1) : 表示從當前位置往后移動x個字符
- seek(-x,2):表示從文件的結尾往前移動x個字符
例如:
>>> f = open('/tmp/foo.txt', 'rb+') >>> f.write(b'0123456789abcdef') 16 >>> f.seek(5) # 移動到文件的第六個字節 5 >>> f.read(1) b'5' >>> f.seek(-3, 2) # 移動到文件的倒數第三字節 13 >>> f.read(1) b'd'
Pickle模塊
python的pickle模塊實現了基本的數據序列和反序列化。通過pickle模塊的序列化操作我們能夠將程序中運行的對象信息保存到文件中去,永久存儲;通過pickle模塊的反序列化操作,我們能夠從文件中創建上一次程序保存的對象。
兩種方法:
pickle.dump 為序列化,將python的數據類型 轉換成“文件”中所需要的類型 一般是write之前使用 直接使用pickle.dump(data1, output)就將data1這個python對象轉換成文件的格式寫到output這個文件的對象中了
pickle.load方法為反序列化,從文件中讀取數據,轉變成python中所需要的類型 一般是read之前使用 data1 = pickle.load(pkl_file) 就將文件對象的數據轉換成python數據格式並用data1來指向它
#使用pickle模塊將數據對象保存到文件 import pickle data1 = {'a': [1, 2.0, 3, 4+6j], 'b': ('string', u'Unicode string'), 'c': None} selfref_list = [1, 2, 3] selfref_list.append(selfref_list) output = open('data.pkl', 'wb') # Pickle dictionary using protocol 0. pickle.dump(data1, output) # Pickle the list using the highest protocol available. pickle.dump(selfref_list, output, -1) output.close() #使用pickle模塊從文件中重構python對象 import pprint, pickle pkl_file = open('data.pkl', 'rb') data1 = pickle.load(pkl_file) pprint.pprint(data1) data2 = pickle.load(pkl_file) pprint.pprint(data2) pkl_file.close()