「第五章」 Python3 檔案操作
5.1 檔案操作流程
對檔案的操作流程:
1。 開啟檔案
2。 透過檔案控制代碼操作檔案(讀、寫。。)
3。 關閉檔案
5.2 檔案操作相關方法
(1)read()
file 內容:
春曉
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。
#例子一
f = open(“file。txt”,“r”,encoding=“utf-8”)
date = f。read()
print(date )
f。close()
#例子二
f = open(“file。txt”,“r”,encoding=“utf-8”)
date = f。read(5) # 表示讀5個字元,一個英文和一箇中文都是一個字元
print(date )
f。close()
執行結果:
春曉
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。
春曉
春眠
(2)open()方法
open(“file。txt”,“r”,encoding=“utf-8”)
r:
表示讀操作
w:
表示寫操作(寫的時候會清空之前的內容)
a:
表示檔案內容追加(在之前的內容基礎上最佳新的內容)
r+:
表示讀寫模式
w+:
表示寫讀模式
a+:
追加讀模式
(3)readline()-按行讀取檔案的內容
readline() 按行讀取檔案的內容,第一次readline()之後,游標會隨著移動,再接著readline(),讀取的內容會跟第一次讀的不一樣。
例子:
f = open(“file。txt”,“r”,encoding=“utf-8”)
print(f。readline())
print(f。readline()) # 讀完第一行的時候,游標已經移動到第二行,所以讀的時候從第二行開始讀
f。close()
執行結果:
春曉
春眠不覺曉,
(4)readlines()-多行讀取檔案的內容
readlines() : 多行讀取檔案的內容,readlines()不帶引數,預設是讀取檔案所有內容,得到的內容是一個列表,列表的元素是每一行的內容,每一行是一個單獨的字串。
例子:
f = open(“file。txt”,“r”,encoding=“utf-8”)
print(f。readlines())
f。close()
執行結果:
[‘春曉\n’, ‘春眠不覺曉,\n’, ‘處處聞啼鳥。\n’, ‘夜來風雨聲,\n’, ‘花落知多少。\n’]
(5)readlines()-遍歷讀取的內容
例子一:
f = open(“file。txt”,“r”,encoding=“utf-8”)
a =f。readlines()
for i in a:
print(i)
f。close()
執行結果:
春曉
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。
例子二:
f = open(“file。txt”,“r”,encoding=“utf-8”)
a =f。readlines()
for i in a:
print(i。strip()) # print()列印多行時,本身就預設換行
f。close()
執行結果:
春曉
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。
(6)readlines()-修改某行內容
程式需求:
春曉
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,I LOVE
花落知多少。
把第四行加個I LOVE 打印出來
程式實現:
#方法一
f = open("file.txt","r",encoding="utf-8")
a =f.readlines()
j =0
for i in a:
j+=1
if j == 3:
print(i.strip()+"I LOVE")
else:
print(i.strip())
f.close()
#最佳化方案一
print("--------------")
f = open("file.txt","r",encoding="utf-8")
a =f.readlines()
j =0
for i in a:
j+=1
if j == 3:
i = i.strip()+"I LOVE"
print(i.strip())
f.close()
#最佳化方案二
print("--------------")
f = open("file.txt","r",encoding="utf-8")
a =f.readlines()
j =0
for i in a:
j+=1
if j == 3:
i = "".join([i.strip(),"I LOVE"])
print(i.strip())
f.close()
#最佳化方案三
print("--------------")
f = open("file.txt","r",encoding="utf-8")
j =0
for i in f: #讀檔案的時候,為了防止檔案過大,防止記憶體存不下(消耗),for迴圈內部將 f 做成一個迭代器,用一行取一行
j+=1
if j == 3:
i = "".join([i.strip(),"I LOVE"])
print(i.strip())
f.close()
執行結果:
春曉
春眠不覺曉,
處處聞啼鳥。I LOVE
夜來風雨聲,
花落知多少。
(7)tell()-讀取游標的位置
tell():讀取游標的位置,一個英文字元佔一個游標位,一箇中文佔3個游標位。
例子:
“”“file。txt
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。
”“”
f = open(“file。txt”,“r”,encoding=“utf-8”)
print(f。tell())
print(f。read(3))
print(f。tell())
f。close()
執行結果:
0
春眠不
9
————————-
0
hel
3
(8)seek()-調整游標的位置
seek(0)-調整游標的位置,0表示從第一個位置開始。
例子:
f = open(“file2。txt”,“r”,encoding=“utf-8”)
print(f。tell())
print(f。read(3))
print(f。seek(0))
print(f。read(5))
print(f。tell())
f。close()
執行結果:
0
hel
0
hello
5
(9)flush()-重新整理緩衝區
flush() 方法是用來重新整理緩衝區的,即將緩衝區中的資料立刻寫入檔案,同時清空緩衝區,不需要是被動的等待輸出緩衝區寫入。
一般情況下,檔案關閉後會自動重新整理緩衝區,但有時你需要在關閉前重新整理它,這時就可以使用 flush() 方法。
#例子:進度條
import sys,time
for i in range(50):
sys.stdout.write("*")
sys.stdout.flush()
time.sleep(0.2)
執行結果:
**************************************************
(10)truncate()-擷取檔案內容
truncate() 清空檔案內容,引數不加,預設是從游標最開始的0開始到結束
例子:
“”“file:
hello world
”“”
#例子一
# f = open(“file。txt”,“w”,encoding=“utf8”)
# f。truncate()
# print(“————-”)
#例子二
f = open(“file。txt”,“a”,encoding=“utf8”)
f。truncate(3) #表示起點從游標位置3開始擷取到最後,如果open的引數是w,擷取的時候,先清空檔案,游標會指向3的位置,如果如果open的引數是a,會把3之後的內容截取了,游標指向3的位置。
執行結果:
hel
(11)isatty()-判斷檔案物件是否是一個終端
isatty()-判斷檔案物件是否是一個終端,執行返回布林值,True 表示 是,False 表示不是
#例子:
f = open(“file2。txt”,“r”,encoding=“utf-8”)
print(f。isatty())
f。close()
執行結果:
False
(12)開啟檔案r+模式
r+: 表示讀寫模式,讀取原來檔案內容,在原來內容的結尾上寫入新的內容
例子:
“”“file:
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。
”“”
#例子一
f = open(“file。txt”,“r+”,encoding=“utf8”)
print(f。readline())
print(f。write(“作者:孟浩然”))
執行結果:
春眠不覺曉,
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。作者:孟浩然
(13)開啟檔案W+模式
開啟檔案w+模式 : 寫檔案之前,先清空檔案,再寫檔案內容,再讀取檔案內容
例子:
“”“file:
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。
”“”
#例子一
f = open(“file。txt”,“w+”,encoding=“utf8”)
print(f。write(“作者:孟浩然”)) #寫完檔案之後,游標跑到最後,再讀操作,讀不到資料
print(f。read()) #讀是讀游標之後的內容
f。close()
#例子二
f = open(“file。txt”,“w+”,encoding=“utf8”)
print(f。write(“作者:孟浩然”))
f。seek(0)
print(f。read())
f。close()
執行結果:
6
6
作者:孟浩然
(13)開啟檔案a+模式
開啟檔案a+模式: 游標是從檔案內容的最後一個字元之後開始
(14)with-開啟檔案,退出with塊時,自動關閉檔案
with-開啟檔案,退出with塊時,自動關閉檔案
例子:
“”“file:
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。
”“”
#方式一
f = open(“file。txt”,“r”,encoding=“utf-8”)
print(f。read())
f。close()
print(“——-”)
#方式二
with open(“file。txt”,“r”,encoding=“utf-8”) as f: #with-開啟檔案,退出with塊時,自動關閉檔案。
print(f。read())
print(“——-”)
#方式三
with open(“file。txt”,“r”,encoding=“utf-8”) as f_read,open(“file1。txt”,“w”,encoding=“utf-8”) as f_write: #同時讀2個檔案,可以用這種方法
j =0
for i in f_read:
j+=1
if j == 3:
i = “”。join([i。strip(),“作者:孟浩然\n”])
f_write。write(i)
執行結果:
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。
——-
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。
——-