「手把手教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)

運行結果:

春眠不覺曉,

處處聞啼鳥。

夜來風雨聲,

花落知多少。

-----

春眠不覺曉,

處處聞啼鳥。

夜來風雨聲,

花落知多少。

-----


分享到:


相關文章: