「手把手教python3介面自動化」「第五章」:檔案操作

「第五章」 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)

執行結果:

春眠不覺曉,

處處聞啼鳥。

夜來風雨聲,

花落知多少。

——-

春眠不覺曉,

處處聞啼鳥。

夜來風雨聲,

花落知多少。

——-