前言:在上一篇博文中,我們主講了檔案的操作模式,主講了寫入資料的形式,但是沒有講到如何對檔案的資料進行讀取,那麼本博文主針對讀取資料的兩種方法來進行細談。(上一篇博文友情連結python檔案操作)
文章目錄:
- 一:Read()方法:
-
- 1.無參數讀取:
- 2.有參數進行讀取:
- 二.Readline()方法:
- 三.Readlines()方法:
- 四.建議:
😃在此之前,我們首先建立一個檔案,寫入一定的資料,以友善我們讀取有資料😃
with open("測試","a",encoding="utf-8") as f:
for i in range(10):
f.write(f"您好世界:{i}\n")
一:Read()方法:
是逐字元地讀取,
read()
可以指定參數,設定需要讀取多少字元,無論一個英文字母還是一個漢字都是一個字元。
read()
:
read(self,n)
:這個參數指的也就是這個要的檔案本身,
self
:為讀取
n
的資料
指定個數
格式: 檔案名.read()
1.無參數讀取:
with open("測試","r",encoding="utf-8") as f:
# for i in range(10):
# f.write(f"您好世界:{i}\n")
print(f.read())
用于從檔案讀取指定的位元組數,如果
未給定指定讀取的位元組數(n)
或
為負
則讀取所有的,也就是讀取資料是
一次性全部進行讀取
2.有參數進行讀取:
給定
指定讀取得到位元組數
,則會讀取到
指定的個數,
如果給定的位元組數
超出
原有文本的位元組數,那麼
不會報錯
會讀取
所有
的内容:
with open("測試","r",encoding="utf-8") as f:
# for i in range(10):
# f.write(f"您好世界:{i}\n")
print(f.read(2))
print(f.read(67))
如果第一次讀取一定的字元,然後第二次再進行讀取,那麼光标會定位在
第一次讀取後的末尾
,就像上圖所示效果,會在
末尾繼續讀取
,不會重新重頭開始讀取
二.Readline()方法:
readline()
:用于從檔案讀取整行,包括
"\n"
字元。如果指定了一個
非負數
的參數,則傳回
指定大小
的位元組數,包括
"\n"
字元。
with open("測試","r",encoding="utf-8") as f:
# for i in range(10):
# f.write(f"您好世界:{i}\n")
print(f.readline())
由上可以看到,後面有很大的空閑,這是由于
readline()
讀取到了
文本
的
"\n"
加上
print本身自帶的換行
,是以也就是說現在有
兩個換行
,是以會有這麼大的空:
三.Readlines()方法:
readlines()
:用于讀取所有行(直到
結束符 EOF
)并傳回
清單
,如果碰到結束符
EOF
則傳回
空字元串
,至于什麼是
EOF
,詳情請看EOF(連結取自百度百科)
readlines()
和
readline()
相似,都取到了
"\n"
,隻不過
readlines()
将其裝入到
清單中并進行傳回
,但是
readline()
隻是取到了,但是
不會顯示"\n",
那是什麼意思呢?一起來看看吧.
with open("測試","r",encoding="utf-8") as f:
# for i in range(10):
# f.write(f"您好世界:{i}\n")
print(f.readlines())
print(type(f.readlines()))
如上圖所示,取到的是一個
清單
,并且後面都
帶有"\n"
,這是因為在寫資料時候已經換行了,它就會把換行符
顯示
出來,如果不想讓他們顯示的話,我們可以配合
for ... in ...
來進行顯示,但是我們又會發現一個問題,見圖:
with open("測試","r",encoding="utf-8") as f:
# for i in range(10):
# f.write(f"您好世界:{i}\n")
# print(f.readlines())
for i in f.readlines():
print(i)
print(type(f.readlines()))
進行顯示後後面會有那麼大的空隙,這是因為換行符起到作用了,我們可以使用字元串中的
strip()
方法來進行修改,如下:
with open("測試","r",encoding="utf-8") as f:
# for i in range(10):
# f.write(f"您好世界:{i}\n")
# print(f.readlines())
for i in f.readlines():
ret=i.strip()
print(ret)
print(type(f.readlines()))
四.建議:
個人推薦一般使用時
盡量使用readline()方法
,因為
read()
是
一次性讀取
所有檔案資料,對于小檔案來說還行,但是當檔案比較大的時候就不可以了,就會很慢,也會對記憶體造成不必要的損耗,
readline()方法
,讀取時
占用記憶體小,比較适合大檔案
,該方法
傳回一個字元串對象
,是以
推薦大家使用readline()方法
,相對于
readlines()方法
,它每次将資料
存儲在清單中
,每行都是一個元素,相對讀取大檔案而言比較占用記憶體。