學習進度筆記

2022-06-20 08:54:11 字數 1515 閱讀 9486

學習進度筆記03

今天學習了python的檔案讀寫

io在計算機中指input/output,也就是輸入和輸出。由於程式和執行時資料是在記憶體中駐留,由cpu這個超快的計算核心來執行,涉及到資料交換的地方,通常是磁碟、網路等,就需要io介面。

由於cpu和記憶體的速度遠遠高於外設的速度,所以,在io程式設計中,就存在速度嚴重不匹配的問題。舉個例子來說,比如要把100m的資料寫入磁碟,cpu輸出100m的資料只需要0.01秒,可是磁碟要接收這100m資料可能需要10秒,怎麼辦呢?有兩種辦法:

第一種是cpu等著,也就是程式暫停執行後續**,等100m的資料在10秒後寫入磁碟,再接著往下執行,這種模式稱為同步io;

另一種方法是cpu不等待,只是告訴磁碟,「您老慢慢寫,不著急,我接著幹別的事去了」,於是,後續**可以立刻接著執行,這種模式稱為非同步io。

同步和非同步的區別就在於是否等待io執行的結果。好比你去麥當勞點餐,你說「來個漢堡」,服務員告訴你,對不起,漢堡要現做,需要等5分鐘,於是你站在收銀台前面等了5分鐘,拿到漢堡再去逛商場,這是同步io。

你說「來個漢堡」,服務員告訴你,漢堡需要等5分鐘,你可以先去逛商場,等做好了,我們再通知你,這樣你可以立刻去幹別的事情(逛商場),這是非同步io。

很明顯,使用非同步io來編寫程式效能會遠遠高於同步io,但是非同步io的缺點是程式設計模型複雜。想想看,你得知道什麼時候通知你「漢堡做好了」,而通知你的方法也各不相同。如果是服務員跑過來找到你,這是**模式,如果服務員發簡訊通知你,你就得不停地檢查手機,這是輪詢模式。總之,非同步io的複雜度遠遠高於同步io。

以讀檔案的模式開啟乙個檔案物件,使用python內建的open()函式,傳入檔名和標示符。

呼叫read()方法可以一次讀取檔案的全部內容

呼叫close()方法關閉檔案

呼叫read()會一次性讀取檔案的全部內容,如果檔案有10g,記憶體就爆了,所以,要保險起見,可以反覆呼叫read(size)方法,每次最多讀取size個位元組的內容。另外,呼叫readline()可以每次讀取一行內容,呼叫readlines()一次讀取所有內容並按行返回list。因此,要根據需要決定怎麼呼叫。

如果檔案很小,read()一次性讀取最方便;如果不能確定檔案大小,反覆呼叫read(size)比較保險;如果是配置檔案,呼叫readlines()最方便。

寫檔案和讀檔案是一樣的,唯一區別是呼叫open()函式時,傳入識別符號'w'或者'wb'表示寫文字檔案或寫二進位制檔案

stringio

很多時候,資料讀寫不一定是檔案,也可以在記憶體中讀寫。stringio顧名思義就是在記憶體中讀寫str。要把str寫入stringio,我們需要先建立乙個stringio,然後,像檔案一樣寫入即可

bytesio

stringio操作的只能是str,如果要操作二進位制資料,就需要使用bytesio。

bytesio實現了在記憶體中讀寫bytes,我們建立乙個bytesio,然後寫入一些bytes。

stringio和bytesio是在記憶體中操作str和bytes的方法,使得和讀寫檔案具有一致的介面

學習進度筆記

學習進度筆記26 分類演算法 分類演算法屬於監督式學習,使用類標籤已知的樣本建立乙個分類函式或分類模型,應用分類模型,能把資料庫中的類標籤未知的資料進行歸類。分類在資料探勘中是一項重要的任務,目前在商業上應用最多,常見的典型應用場景有流失 精確營銷 客戶獲取 個性偏好等。mllib 目前支援分類演算...

學習進度筆記

學習進度筆記24 讀取檔案演示 import org.apache.spark.sparkconf import org.apache.spark.streaming.import org.apache.spark.streaming.streamingcontext.object fileword...

學習進度筆記

學習進度筆記16 scala語言學習 object testmap def ttt f int int unit val r f 10 println r val f0 x int x x 定義了乙個方法 def m0 x int int 傳遞進來的引數乘以10 x 10 將方法轉換成函式,利用了神...