Python基礎:文件讀寫

由於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/python

poem = '''\

1.dog

2.cat

3.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是個好習慣。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章