一、文件處理流程
1、新建一個txt文件:
2、文件操作流程:打開==》讀/寫==》關閉
注意:如果不指定編碼,則文件將以你當前操作系統的默認編碼格式打開
3、文件讀取操作
file = open("牧馬城市", "r", encoding='utf-8') # 只讀文件
4、文件寫入操作(文件名存在,清空原文件內容;文件名不存在,則新建一個文件)
file = open("牧馬城市", "w", encoding='utf-8') # 只寫文件
5、文件追加操作
file = open("牧馬城市", "a", encoding='utf-8') # 追加文件
追加模式後使用寫入功能添加到文件的末尾
6、文件關閉
file.close()
7、文件其他操作模式:
file = open("牧馬城市", "r+", encoding='utf-8') # 支持文件的讀寫
file = open("牧馬城市", "a+", encoding='utf-8') # 支持文件的讀寫
8、模擬文件的打開修改關閉過程
(1)、open()函數打開文件
(2)、read()函數讀出全部數據並保存
(3)、對保存的數據做需求修改處理並保存
(4)、關閉文件
(5)、再次打開文件
(6)、將修改後的數據寫入文件中
(7)、關閉文件
9、with as 用法替換close操作
with open('a.txt', 'w') as f:
f.write("使用with+as簡化關閉操作")
with open('a.txt', 'r', encoding='gbk') as f1, open('b.txt', 'w', encoding='gbk') as f2:
data = f1.read()
f2.write(data)
10、文件b模式操作
# 文件b模式操作(二進制模式)
# 注意:文件在保存的時候是以unicode二進制的形式保存在硬盤上面的,所以使用這種形式打開文件不能指定文件編碼格式
# 編碼字符串======》encode ======》編碼轉換成二進制存儲
# 讀取出二進制 ======》 decode ======》解碼轉換成字符串
# b模式讀取
file = open("牧馬城市", "rb")
data = file.read() # 讀取出原生的二進制內容
print("使用b模式讀取到的原生的二進制文件內容是:", data)
print("使用b模式讀取到的解碼後的文件內容是:", data.decode('utf-8'))
file.close()
# b模式寫入
file = open("c.txt", "wb")
# 兩種將字符串轉換成bytes的方式
file.write(bytes('你好,世界\n', encoding='utf-8'))
file.write('呵呵噠\n'.encode(encoding='utf-8'))
file.close()
# b模式追加
file = open("c.txt", "ab")
file.write('滾犢子\n'.encode(encoding='utf-8')) # 在文件的最後一個位置寫入
file.close()
11、文件操作的其他函數方法
file = open("d.txt", "w")
print("判斷文件是否關閉:", file.closed)
print("查看文件打開的編碼格式;", file.encoding)
print("將新的內容刷新到硬盤上面:", file.flush())
print("是否在中斷上面執行的:", file.isatty())
print("打開文件的文件名:", file.name)
print("光標在文件中的位置:", file.tell())
print("控制文件中光標的移動: ", file.seek(3))
print("從起始位置開始截取多少位:", file.truncate(10))
12、文件操作之seek()函數詳解:
# seek(x,0)默認從文件的開頭開始計算
file = open("d.txt", "r", encoding="utf-8")
print(file.tell())
file.seek(10, 0)
print(file.tell())
file.seek(3, 0)
print(file.tell())
# seek(x,1)指定從相對位置(上一次光標停留的位置)開始移動,以rb的模式進行操作
file = open("d.txt", "rb")
print(file.tell())
file.seek(10, 1)
print(file.tell())
file.seek(3, 1)
print(file.tell())
# seek(-x,2)從文件末尾開始倒序
file = open("d.txt", "rb")
print(file.tell())
file.seek(-6, 2)
print(file.read())
print(file.tell())
# 適用場景:查看日誌文件的最後的內容
file = open("d.txt", "rb")
# for item in file: # 文件循環直接循環文件本身就行
offset = -20
while True:
file.seek(offset, 2)
data = file.readlines()
if len(data) > 1:
print("文件的最後一行是: %s" % (data[-1].decode('utf-8')))
break
offset *= 2