讀寫檔案是最常見的io操作。python內建了讀寫檔案的函式,用法和c是相容的www.kmhxnkyy.com。
try:www.kmhxnkyy.com
f = open(r'c:\users\syc\desktop\temp.txt')
print f.read()
finally:
if f:
f.close()
複製**www.kmhxnkyy.com
讀取檔案必須執行close方法;另一種方法:
with open(r'c:\users\syc\desktop\temp.txt') as f:
print f.read()
複製**
python引入了
with
語句來自動幫我們呼叫
close()
方法,這和前面的try ... finally是一樣的,但是**更佳簡潔,並且不必呼叫f.close()方法
呼叫read()會一次性讀取檔案的全部內容,如果檔案有10g,記憶體就爆了,所以,要保險起見,可以反覆呼叫read(size)方法,每次最多讀取size個位元組的內容。另外,呼叫readline()可以每次讀取一行內容,呼叫readlines()一次讀取所有內容並按行返回list。因此,要根據需要決定怎麼呼叫。www.kmhxnkyy.com
www.kmhxnkyy.com
如果檔案很小,read()一次性讀取最方便;如果不能確定檔案大小,反覆呼叫read(size)比較保險;如果是配置檔案,呼叫readlines()最方便:
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'刪掉
複製**
file-like object
像open()函式返回的這種有個read()方法的物件,在python中www.kmhxnkyy.com統稱為file-like object。除了file外,還可以是記憶體的位元組流,網路流,自定義流等等。file-like object不要求從特定類繼承,只要寫個read()方法就行。
stringio就是在記憶體中建立的file-like object,常用作臨時緩衝。
'rb'
模式開啟檔案即可
複製**
要讀取非ascii編碼的文字檔案,就必須以二進位制模式開啟,再解碼。比如gbk編碼的檔案
python提供了乙個codecs模組幫我們在讀檔案時自動轉換編碼,直接讀出unicode:
import codecswww.kmhxnkyy.com
with codecs.open('/users/michael/gbk.txt', 'r', 'gbk') as f:
f.read() # u'\u6d4b\u8bd5'
複製**
寫檔案寫檔案和讀檔案是一樣的,唯一區別是呼叫open()函式時,傳入識別符號'w'或者'wb'表示寫文字檔案或寫二進位制檔案;
你可以反覆呼叫write()來寫入檔案,但是務必要呼叫f.close()來關閉檔案。當我們寫檔案時,作業系統往往不會立刻把資料寫入磁碟,而是放到記憶體快取起來,空閒的時候再慢慢寫入。只有呼叫close()方法時,作業系統才保證把沒有寫入的資料全部寫入磁碟。忘記呼叫close()的後果是資料可能只寫了一部分到磁碟,剩下的丟失了。所以,還是用with語句來得保險:
with open('/users/michael/test.txt', 'w') as f:
f.write('hello, world!')
複製**
www.kmhxnkyy.com
要寫入特定編碼的文字檔案,請效仿
codecs
的示例,寫入unicode,由
codecs
自動轉換成指定編碼。
在python中,檔案讀寫是通過open()函式開啟www.kmhxnkyy.com的檔案物件完成的。使用with語句操作檔案io是個好習慣。
操作檔案和目錄
os模組的某些函式是跟作業系統相關的,操作檔案和目錄的函式一部分放在os模組中,一部分放在os.path模組中,這一點要注意一下。檢視、建立和刪除目錄可以這麼呼叫:
os.path.abspath('.') # 當前路徑下的絕對路徑
os.path.join('***', 'yyyy') # 把兩個路徑合成乙個時,不要直接拼字串,而要通過os.path.join()函式,這樣可以正確處理不同作業系統的路徑分隔符。
os.mkdir('***') # 建立目錄www.kmhxnkyy.com
www.kmhxnkyy.com
os.rmdir('***') # 刪除目錄
os.path.split('/users/michael/testdir/file.txt') # ('/users/michael/testdir', 'file.txt') 拆分目錄
os.path.splitext('/path/to/file.txt') # ('/path/to/file', '.txt') os.path.splitext()可以直接讓你得到副檔名
os.rename('test.txt', 'test.py') # 檔案重新命名
os.remove('test.py') # 刪除檔案
複製**
序列化:
python提供兩個模組來實現序列化:cpickle
和pickle
。這兩個模組功能是一樣的,區別在於
cpickle
是c語言寫的,速度快,
pickle
是純python寫的,速度慢,跟
cstringio
和stringio
乙個道理。用的時候,先嘗試匯入
cpickle
,如果失敗,再匯入
pickle :
try:
import cpickle as pickle
except importerror:
import pickle
複製**
Python開發之路(九)
一 併發程式設計之 程序 什麼是併發程式設計?就是乙個程式可以在同一時刻做多件事情,也就是解決程式中的io操作影響程式效率的問題。1.程序 什麼是程序?即執行中的程式。且是計算機中最小的資源分配單位。在python中,每乙個執行中的程式,都是乙個程序,乙個程序就能做一件事,如果有多個程序,就可以做多...
Python學習筆記(九)
python 對檔案的操作 1 fp open filename r 以讀的方式開啟檔案 w 以寫方式開啟,a 以追加模式開啟 從 eof 開始,必要時建立新檔案 r 以讀寫模式開啟 w 以讀寫模式開啟 a 以讀寫模式開啟 rb 以二進位制讀模式開啟 wb 以二進位制寫模式開啟 ab 以二進位制追加...
Python 學習筆記(九)
字典是內建型別,無序的物件集合,字典是通過鍵來訪問的,而不是通過偏移來訪問。建立字典in 1 var in 2 var out 2 in 3 var dict spam 2,eggs 3 in 4 var out 4 in 5 var dict.fromkeys spam eggs in 6 var...