好,那這個
所以呢,這個我們如果要讀檔的話,我們就用剛剛定義的那個 fn1。
好,然後呢,這個 fn1 如果你自己要測試的話,你要把它這個代換成這個
你自己這個剛剛存檔的那個絕對路徑,然後呢,所以我們要 打開這個
open 這個檔案,然後我們的模式是讀,對不對。
encoding 是 UTF-8 對不對? 然後呢,我們用把這個 open 的結果放到一個 fh1
這個 file handler 裡,然後呢,你 我這邊是,模式是 r
嘛,當然你也可以用這個 w,好。
如果你是要寫檔,那 r+ 的話,就是你又要讀又要寫的意思。
那你如果 是只是你是要所謂的 appending,就是說這個檔案本來已經有了
然後裡面已經有內容了,你要把新的內容加到檔案的後面的話,你就用 a,好。
a 是說 appending 的意思,當然就是說呢 encoding
的話,就是看你是 要設什麼,這是你的選擇,那你如果沒有設的話,它會用所謂的這個系統預設哦,那不同的
系統會有不同的系統預設哦,那我個人覺得你應該要設一下哦,不然的話,你的 core
如果在別的作業系統 run 的時候可能會出錯,因為就是不同的左右系統它可能不同的預設的 encoding。
如果你是 binary file 的話,是 rb 或者是 wb,然後呢最後
結束的時候,你要用這個 fh1.close 這個指令把檔案關起來,好。
然後呢,你如果要讀檔的時候呢,我們可以有兩種選擇最少哦,事實上不止兩種哦。
那 第一種就是你可以用一個 for loop,好,我們等一下會看到,另外一個你可以用 fh1.readline() 這樣就會一次讀一行出來。
一直讀到它檔案沒有為止。
所以我們來看一下哦,這是一個這個讀檔的一個 例子,好,就是說呢,第一行呢,我們剛剛有看到,對不對。
它是 open,對不對,open 之後呢 然後呢,拿到一個 file handler 1,然後接下來我們要讀檔。
所以讀檔用的是 把它擺到一個 for 迴圈,對不對?我們剛剛拿到這個 fh1,就是把它擺到一個 for
迴圈,所以是 for aline in 這個 fh1,它這樣子,當你寫
這樣子的時候呢,它就會去把 fh1 裡面的一行一行的 這個內容,檔案內容讀進來,每一次放到這個
aline 這個變數,然後呢,我們 定義了一個額外的和一個計數變數,去計說它現在在哪一行。
所以一開始的時候是 linecount 是 0,是第 0
行,然後呢,等我們進了第一行之後,你就給它加 1,然後呢,每讀一行就加 1,對不對,好。
然後因為我們希望最後印出來的東西不要太醜,那所以說我們說呢,如果這一行小於 75
個字元的話 那我們就把它印出來,所以如果這個
這個 aline 不是太長的話,我們就把 aline 印出來,而且這時候呢 我們會把 aline 做 strip 的這個動作。
那什麼叫 strip 呢,那 strip 就是把多餘的空白跟換行去掉。
為什麼要做這個事情呢,的原因是因為,就是說一般來說
這個你如果是讀文字檔,一行一行讀進來的話,每一行後面會有一個換行。
會有一個換行,那這個換行呢如果說你去 把它丟到
print 裡面去把它印出來的時候,print 本身會幫你換行,所以就換了兩次。
那我們現在不用,只要換一次,所以 我們就先把這個 aline 裡面的這個最後面的空白跟換行把它
弄掉,所以利用 strip,aline.strip 這個 method。
然後呢,所以我們,然後呢,我們希望說印出來它現在是在哪一行, 所以我們就是把
linecount 跟 aline 都印出來,所以我們利用這樣子的一個
formatting 就是說呢,aline 我們就是用這個兩位數的一個整數,然後前面
補了一個方式,然後後面就是這個內容,對不對?那如果說呢,你是這個 aline
如果很長的話,那我們就是一樣哦,但我們後面的 就是加再點點點 truncated,而且呢,我們只印
就是第 0 個字元到第 74 個字元,所以這樣就是說不會有那種
很長很長的,會搞不清楚狀況會破壞整個這個 這個 layout 的狀況。
然後呢當然做完了之後,這是一個 for 迴圈到這裡嘛,然後它會不斷地 去把這個一行一行地讀進來印出來、
讀進來印出來,直到 這個全部都讀完了之後呢,最後我們就把它
這個檔案關起來,fh1.close 這樣子,所以結果就是看
到它是會是像這個樣子,第 0 行是這樣,對不對,然後後面有個空白行。
對不對?然後呢,第三行是這樣字,第三行比較長,所以後面被我 切掉了,第四行是一個空白行,第五行是這樣子,好。
所以這就是這個最後的結果,那這個就是讀檔的部分。
那接下來我們來看寫檔。
那寫檔的時候,基本上用的就是這個 write 這個函數啦,這個 method。
那所以我們來看一個例子哦,就是怎麼樣去寫檔,比如說呢,我們現在就是請 這個使用者,這個 input
你的名字,好,就是 input 然後 enter your name 對不對?然後把它存到 name 這個變數。
然後呢,enter your birthday,然後呢 這個放到 dob
這個變數,然後呢,我們說呢,我們到時候呢 要把這個內容存到
fn2,fn2 被是這樣子的 這樣子的一個檔案,它是在這個目錄下面的叫做
arec.txt,對不對?然後呢,好 open
呢就用這個檔名,然後呢,然後這時候模式就寫 w,encoding 呢就是
UTF-8,對不對?然後呢 我們就可以說 fh2.write.
然後呢,名字後面加上一個 這個 backslash
n 這個是換行,所以這個 你下一次再call write
的時候,它就會從下一行開始,你如果沒有這個換行的 話,它就會全部都連在一起。
然後呢,再 call 一次 fh2.write,然後 date of birth 再加上這個 backslash n,所以它最後也會有個換行。
然後呢,再把檔案關起來。
所以你可以想想看這樣子的結果 會是什麼?好,你可以先預想一下。
那 所以我們來看一個執行的結果哦,就是說我們執行這個 script 的時候 首先它就會問你說你 enter your name,對不對。
比如說我叫 Rich Man。
然後呢,enter your birthday,對不對。
比如我們就說 2019-09-09 對不對,通常都是
越老越有錢嘛,有些人是越老越窮。
那 所以程式就結束了,對不對?那你這時候就把我們剛剛指定的那個檔案打開的話,就發現裡面-
有兩行: 好,第一行叫做 Rich Man,第二行叫做 2019 然後 09-09 這樣子,好。