1. 程式人生 > >Python - 文件讀寫

Python - 文件讀寫

方法 com open 分享 highlight div print app 後來

r:只讀模式(如果沒指定模式,默認為只讀模式)

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_test‘, mode=‘r‘)  # 文件句柄
fr = f.read()
print(fr)

f.close()  # 關閉文件

運行結果

技術分享圖片

如果對同一個文件句柄連續進行 read() 操作的話,只有第一個 read() 操作有內容,其余的都是空白的

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_test‘, mode=‘r‘)  # 文件句柄

fr = f.read()
fr1 = f.read()
fr2 = f.read()

print(fr)
print("---------")
print(fr1)
print("+++++++++")
print("---------")
print(fr2)
print("+++++++++")

f.close()  # 關閉文件

運行結果

技術分享圖片

因為 read() 操作是連續的

技術分享圖片

readline() 進行一行一行地讀取

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_test‘, mode=‘r‘)  # 文件句柄
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
f.close()  # 關閉文件

運行結果

技術分享圖片

因為每一行末尾都有一個換行符 \n,打印的時候 \n 也打印了,所以空了一行

readlines() 以行為單位讀取文件內容

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_test‘, mode=‘r‘)  # 文件句柄
fr = f.readlines()
print(fr)

f.close()  # 關閉文件

運行結果

技術分享圖片

結果是列表,每行字符串為該列表的元素,每行末尾有個換行符 \n

打印每行的內容

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_test‘, mode=‘r‘)  # 文件句柄

for line in f.readlines():
    print(line.strip())  # strip() 去掉換行符

f.close()  # 關閉文件

運行結果

技術分享圖片

readlines() 遇到大文件時比較占內存,因為 readlines() 直接將整個文件讀入內存,推薦用下面的方法

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_test‘, mode=‘r‘)  # 文件句柄

for line in f:
    print(line.strip())  # strip() 去掉換行符

f.close()  # 關閉文件

這個方法是一行一行地讀

readable() 判斷文件是否可讀

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_test‘, mode=‘r‘)  # 文件句柄

fr = f.readable()
print(fr)

f.close()  # 關閉文件

運行結果

技術分享圖片

w:只寫模式,文件不存在則創建,文件存在則覆蓋原文件

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_w‘, mode=‘w‘)

f.write(‘憫農\n‘)
f.write(‘李紳\n‘)
f.write(‘春種一粒粟,秋收萬顆子。\n‘)
f.write(‘四海無閑田,農夫猶餓死。‘)

f.close()

運行,創建了一個文件“file_w”(本地沒有該文件)

技術分享圖片

如果文件存在的話

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_w‘, mode=‘w‘)

f.write(‘test‘)

f.close()

運行結果

技術分享圖片

之前的內容被新的內容覆蓋了

還有一個 writelines() 方法,可以寫入一個序列

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_w‘, mode=‘w‘)

f.writelines(["春種一粒粟,", "秋收萬顆子。\n"])
f.writelines(("四海無閑田,", "農夫猶餓死。\n"))
f.writelines({"鋤禾日當午,", "汗滴禾下土。\n"})
f.writelines("誰知盤中餐,粒粒皆辛苦。")

f.close()

運行結果

技術分享圖片

用逗號隔開的各個元素進行拼接

a:追加模式,只能寫不能讀,不會創建新文件,不會覆蓋原文件,在原文件後追加內容

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file="file_w", mode=‘a‘)

f.write(‘\nThis is a test‘)

f.close()

運行結果

技術分享圖片

追加模式寫的方法和只讀模式用的方法一樣,只不過追加模式是在原文件末尾添加內容

rb:只讀二進制模式

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_test‘, mode=‘rb‘)

fr = f.read()
print(fr)

f.close()

運行結果

技術分享圖片

wb:只寫二進制模式

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_w‘, mode=‘wb‘)

f.write(‘春種一粒粟,秋收萬顆子。\n‘.encode())
f.write(b‘This is a test‘)

f.close()

運行結果

技術分享圖片

wb 也可以用來寫入圖片文件、音頻文件等

ab:追加二進制模式

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file="file_w", mode=‘ab‘)

f.write(‘\nThis is from append1\n‘.encode())
f.write(b‘This is from append2‘)

f.close()

運行結果

技術分享圖片

r+:讀寫模式,既可讀,也可以寫(讀模式支持寫)

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_test‘, mode=‘r+‘)

fr = f.read()
print(fr)
f.write(‘From Writing‘)
fr1 = f.read()
print(fr1)

f.close()

運行結果

技術分享圖片

寫入的內容

技術分享圖片

後來寫進去的那句話並沒有被讀出來

w+:寫讀模式,既可寫,也可以讀(寫模式支持讀)

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file=‘file_w‘, mode=‘w+‘)

print(f.read())
f.write(‘四海無閑田,‘)
f.write(‘農夫猶餓死。‘)
print(f.read())

f.close()

運行結果

技術分享圖片

讀出的內容是空的

寫入的內容

技術分享圖片

原來的內容被覆蓋了

a+:可讀追加模式

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

f = open(file="file_w", mode=‘a+‘)

print(f.read())
f.write(‘\nThis is from append1\n‘)
f.write(‘This is from append2‘)
print(f.read())

f.close()

運行結果

技術分享圖片

寫入的內容

技術分享圖片

Python - 文件讀寫