文件讀取的步驟:
- 打開文本文件對象
- 寫入數(shù)據(jù)
文件的讀取一般使用如下三個(gè)方法:
read([size])
: 從文件中讀取 size 個(gè)字符,并作為結(jié)果返回如果沒有 size 參數(shù),則讀取整個(gè)文件. 讀取到文件末尾,會(huì)返回空字符串readline()
: 讀取一行內(nèi)容作為結(jié)果返回讀取到文件末尾,會(huì)返回空字符串readlines()
: 文本文件中,每一行作為一個(gè)字符串存入列表中,返回該列表
代碼格式
with open(r"d:\\a.txt", "r"[, encoding="utf-8"]) as f:
f.read(4)
注意:
- 在讀取文件時(shí), 需要注意讀寫時(shí)字符編碼的一致性 , 如果寫的時(shí)候沒有指定編碼(默認(rèn)GBK), 則在讀取的時(shí)候也不需要指定編碼
- 但如果讀的時(shí)候未指定編碼, 寫的時(shí)候指定, 則會(huì)報(bào)錯(cuò). 例如: 寫的時(shí)候指定
encoding="utf-8"
, 則控制臺(tái)報(bào)UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbc in position 13: invalid start byte
實(shí)操代碼
# 【操作】 讀取一個(gè)文件前4個(gè)字符
import pickle
with open(r"d:\\a.txt", "r") as f:
print(f.read(4))
# 【操作】文件較小,一次將文件內(nèi)容讀入到程序中
with open(r"d:\\aa.txt", "r") as f:
print(f.read())
# 【操作】按行讀取一個(gè)文件
with open(r"d:\\b.txt") as f:
while True:
lines = f.readline()
if not lines: # 在python 中 if not 會(huì)將后面對象隱式轉(zhuǎn)成True或者False進(jìn)行判斷, 因此遇到空字符串也返回False
break
else:
print(lines, end="")
print()
# 【操作】使用迭代器(每次返回一行)讀取文本文件
# 寫和讀的編碼要對應(yīng)
with open(r"d:\\bb.txt", "r", encoding="utf-8") as f:
for a in f:
print(a, end="")
# 【操作】為文本文件每一行的末尾增加行號
with open(r"d:\\c.txt", "r") as f:
lines = f.readlines()
lines2 = [line.rstrip() + " # " + str(index) + "\\n" for index, line in zip(range(1, len(lines) + 1), lines)]
with open(r"d:\\c.txt", "w") as ff:
ff.writelines(lines2)
二進(jìn)制文件的讀取和寫入
二進(jìn)制文件的處理流程和文本文件流程一致。首先還是要?jiǎng)?chuàng)建文件對象, 創(chuàng)建好二進(jìn)制文件對象后,仍然可以使用 write() 、 read() 實(shí)現(xiàn)文件的讀寫操作
在創(chuàng)建文件對象時(shí), 首先需要指定二進(jìn)制模式,然后才能創(chuàng)建出二進(jìn)制文件對象. 例如
f = open(r"d:\\a.txt", 'wb')
可寫的、重寫模式的二進(jìn)制文件對象f = open(r"d:\\a.txt", 'ab')
可寫的、追加模式的二進(jìn)制文件對象f = open(r"d:\\a.txt", 'rb')
可讀的二進(jìn)制文件對象
實(shí)操代碼
# 二進(jìn)制文件的讀取和寫入(此操作相當(dāng)于復(fù)制)
# f = open(r"d:\\a.txt", 'wb') #可寫的、重寫模式的二進(jìn)制文件對象
# f = open(r"d:\\a.txt", 'ab') #可寫的、追加模式的二進(jìn)制文件對象
# f = open(r"d:\\a.txt", 'rb') #可讀的二進(jìn)制文件對象
with open(r"d:\\aaa.png", "rb") as scrFile, open(r"d:\\bbb.png", "wb") as destFile:
for l in scrFile:
destFile.write(l)
2.4. 文件對象的常用屬性和方法
文件對象的屬性文件對象的打開模式
文件對象的常用方法
文件任意位置操作
利用 seek() 可以將讀取文件的指針移動(dòng)到指定字節(jié)位置上一個(gè)中文字符站兩個(gè)字節(jié), 而英文只占一個(gè)字節(jié)
實(shí)操代碼
print("=================文件任意位置操作======================")
# 【示例】 seek() 移動(dòng)文件指針示例
with open(r"d:\\cc.txt", "r") as f:
print("文件名是{0}".format(f.name)) # 文件名是d:\\cc.txt
print(f.tell()) # 0
print("讀取文件的內(nèi)容", str(f.readline())) # 讀取文件的內(nèi)容 齊格飛齊格飛齊格飛
print(f.tell()) # 18
f.seek(4, 0) # 中文占2個(gè)字節(jié), 因此在seek時(shí)需要是2的倍數(shù)
print("文件讀取的內(nèi)容", str(f.readline())) # 文件讀取的內(nèi)容 飛齊格飛齊格飛
print(f.tell()) # 18
-
文件
+關(guān)注
關(guān)注
1文章
555瀏覽量
24633 -
python
+關(guān)注
關(guān)注
54文章
4756瀏覽量
84283
發(fā)布評論請先 登錄
相關(guān)推薦
評論