昨天颱風天在家耍廢一天了,今天來一點簡單的
讀檔案應該是寫程式中最令人崩潰的問題~前幾天有人問我讀檔案時,還不免俗的腦袋當機呢!
檔案類型多變,所以在讀檔案時總會有不少問題。
今天我們在這裡介紹幾個讀檔案的方法
之後再一起來完成一個題目
今天我們設定處理這筆測試資料data,但在這之前我們先來練習這個小筆資料data1
open(filename,mode)
:開啟檔案,其中filename就是檔案存在位置,mode是要對這個檔案做些事情r
- 唯讀模式(檔案需存在),只能從指定檔案讀取資料,並不能夠對這個檔案的內容進行任何寫入或變更w
- 寫入模式(進行覆寫),如果檔案存在,會直接覆蓋掉原本的檔案,進行覆寫。如果指定的檔案路徑/名稱不存在,則會新增一個新的檔案進行寫入(檔案可不存在,若存在則清空)a
- 寫入模式(進行續寫),在此模式下開啟檔案要進行寫入時,會從原本的檔案最後繼續進行寫入,即把續寫資料直接附加到舊檔案後面.readline()
:讀取檔案中的整行資料,每次只讀取一行,讀完後會於每行末加上'\n'換行字元.readlines()
:讀取檔案中的整行資料,直到讀完所有資料,也會於每行末加上'\n'換行字元,最後會將資料存在一個list中read(size)
:參數size是選填,若設置size大小,電腦就會只為讀到指定的字節數量,一般預設是將整個檔案內容讀進來,會於每行末加上'\n'換行字元.close
:將檔案關閉,停止對於檔案進行任何操作。(關檔案是好習慣)#read1.py
f=open('data1.txt','r')
k=f.read()
print(type(k))
print(k)
f.close
#read2.py
f=open('data1.txt','r')
k=f.readlines()
print(type(k))
print(k)
f.close
>>>python read1.py
<class 'str'>
a,1
c,2
b,5
...
>>>python read2.py
<class 'list'>
['a,1\n', 'c,2\n', 'b,5\n', 'e,5\n', 'a,3\n', 'd,0.2\n', 'e,2\n', 'c,1.5\n', 'f,5.6\n', 'k,7']
read
指定size=5的時候#read3.py
f=open('data1.txt','r')
print(f.read(5))
f.close
>>>python read1.py
a,1
c
readline()
一次只能讀一行,讀過後不重複,會一直繼續往下讀直到結束(以下我們示範五行)#read4.py
f=open('data1.txt','r')
print(f.readline())
for i in range(4):
print(f.readline())
f.close
>>>python read4.py
a,1
c,2
b,5
e,5
a,3
這裡可以發現到因為行末會自動加上'\n'
,會導致輸出到螢幕時會自動換行,以至於會有空白行的出現。
從剛剛使用f.readlines()
的結果可知,會將檔案當中每行當成一個字串並存到list後再回傳。而f.read()
則是直接輸出為字串。但你知道使用for
loop也可以完成一樣的概念:
#read4.py
f=open('data1.txt','r')
for line in f:
#for line in f.readlines()也可以
print(line,end='')
f.close
>>>python read.py
<class 'str'>
a,1
c,2
b,5
...
這裡有多筆測試資料data,其組成就是上面範例,會有一個字母編號,代表其中一個人,隨後的數字就是他某一次得分(資料為chart,number),需要將其分數進行統計後,並且分數由高到低排列。
input:
a,1
c,2
b,5
e,7
a,3
output:
e,7
b,5
a,4
c,2
大家動手做做看吧!