由於CPU和記憶體的速度遠高於週邊裝置的速度,所以,在IO程式設計中,就存在著速度嚴重不符的問題。舉個例子來說,例如要把100M的資料寫入磁碟,CPU輸出100M的資料只需要0.01秒,可是磁碟要接收這100M資料可能需要10秒,怎麼辦呢?有兩種辦法: 第一種是CPU等著,也就是程式暫停執行後續程式碼,等100M的資料在10秒後寫入磁碟,再接著往下執行,這種模式稱為同步IO;另一種方法是CPU不等待,只是告訴磁盤,“您老慢慢寫,不著急,我接著幹別的事去了”,於是,後續代碼可以立刻接著執行,這種模式稱為異步IO同步和異步的差別就在於是否等待IO執行的結果。 非同步的好處是程式效能高,缺點是程式設計模型複雜。想看,你得知道什麼時候通知你“漢堡做好了”,而通知你的方法也各不相同。如果是服務生跑過來找你,這是回調模式,如果服務生傳簡訊通知你,你就得不停地檢查手機,這是輪詢模式。總之,異步IO的複雜度遠高於同步IO 好比你去麥當勞點餐,你說“來個漢堡”,服務員告訴你,對不起,漢堡要現做,需要等5分鐘,於是你站在收銀台前面等了5分鐘,拿到漢堡再去逛商場,這是同步IO。 你說“來個漢堡”,服務員告訴你,漢堡需要等5分鐘,你可以先去逛商場,等做好了,我們再通知你,這樣你可以立刻去幹別的事情(逛商場),這是異步IO。 9.1 檔案讀寫#!/usr/bin/pythonpoem = '''\1.dog2.cat3.rabbit'''f=file('/tmp/poem','w')f.write(poem)f. close() #輸出檔案內容,方法一#f=open('/tmp/poem','r')#for line in f.readlines():# print(line.strip())#f.close( )
#輸出檔案內容,方法二f=file('/tmp/poem')while True: line = f.readline() if len(line)==0: break print(line.strip()) f.close() 寫檔案寫檔案和讀取檔案是一樣的,唯一區別是呼叫open()函數時,傳入識別碼'w'或'wb'表示寫文字檔案或寫二進位檔案:>> > f = open('/Users/michael/test.txt', 'w')
>>> f.write('Hello, world!')
>>> f.close()你可以重複呼叫write()來寫入文件,但務必呼叫f.close()來關閉文件。當我們寫檔案時,作業系統往往不會立刻把資料寫入磁碟,而是放到記憶體快取起來,空閒的時候再慢慢寫入。只有當呼叫close()方法時,作業系統才保證把沒有寫入的資料全部寫入磁碟。忘記呼叫close()的後果是資料可能只寫了一部分到磁碟,剩下的遺失了。所以,還是用with語句來得保險:with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')
用close( )的兩個好處1.關閉開啟的檔案數2.確保記憶體中的資料寫入硬碟f.flush() 不用關閉檔案就可以將記憶體中的內容寫入到硬碟小結在Python中,檔案讀寫是透過open()函數開啟的文件物件完成的。使用with語句操作檔IO是個好習慣。
以上是Python是基礎:檔案讀寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!