手機開發 python學習 基礎(九)

2021-07-06 06:03:33 字數 3025 閱讀 5251

讀寫檔案是最常見的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...