「第五章」 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)
運行結果:
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。
-----
春眠不覺曉,
處處聞啼鳥。
夜來風雨聲,
花落知多少。
-----
閱讀更多 聽海8 的文章