Python之文件處理

一、文件處理流程

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章