如何利用python代碼寫一個軟件,去操做文件。python
文件路徑:pathlinux
打開方式:讀,寫,追加,讀寫,寫讀......windows
編碼方式:utf-8,gbk ,gb2312......函數
#打開文件並讀取 f1 = open('d:\123.txt',encoding='utf-8',mode='r') content = f1.read() print(content) f1.close()
代碼解釋:學習
open()內置函數,open底層調用的是操做系統的接口。 f1,變量,f1,fh,file_handler,f_h,文件句柄。對文件進行的任何操做,都得經過文件句柄. 的方式。 encoding:能夠不寫,不寫參數,默認編碼本:操做系統的默認的編碼 windows: gbk or utf-8 linux: utf-8 mac : utf-8 f1.close() 關閉文件句柄。
文件操做的三部曲:編碼
報錯緣由:操作系統
UnicodeDecodeError:文件存儲時與文件打開時編碼本使用不一致。code
第二個錯誤: 路徑分隔符產生的問題:視頻
解決方式1(加\ 使轉義字符無效) C:\\Users\oldboy\Desktop\123.txt' 解決方式2(加r') r'C:\Users\oldboy\Desktop\123.txt'
#.read() 所有讀出來 f = open('文件的讀', encoding='utf-8') content = f.read() print(content,type(content)) f.close() #.read(n) 按照字符讀取,讀出n個字符 f = open('文件的讀', encoding='utf-8') content = f.read(5) print(content) f.close() #.readline() 按照一行行讀 f = open('文件的讀', encoding='utf-8') print(f.readline()) print(f.readline()) print(f.readline()) f.close() #.readlines() 返回一個列表,列表中的每一個元素是源文件的每一行。 f = open('文件的讀', encoding='utf-8') l1 = f.readlines() print(l1) f.close() #for循環讀取(大文件) f = open('文件的讀', encoding='utf-8') #['12\n', '34\n', '56\n', '78\n', '910\n'] for line in f: print(line) f.close() f = open('美女.jpg',mode='rb') content = f.read() print(content) f.close()
# 沒有文件,建立文件,寫入內容 f = open('文件的寫',encoding='utf-8',mode='w') f.write('隨便寫一點') f.close() # 若是文件存在,先清空原文件內容,在寫入新內容 f = open('文件的寫',encoding='utf-8',mode='w') f.write('隨便寫一點點') f.close() # wb(兩個步驟至關於複製一張圖片的過程) f = open('美女.jpg',mode='rb') content = f.read() print(content) f.close() f1 = open('美女2.jpg',mode='wb') f1.write(content) f1.close()
# 沒有文件建立文件,追加內容 f = open('文件的追加',encoding='utf-8',mode='a') f.write('123456') f.close() # 有文件,在原文件的最後面追加內容。 f = open('文件的追加',encoding='utf-8',mode='a') f.write('654321') f.close()
# 讀並追加 (順序不能錯誤。) f = open('文件的讀寫', encoding='utf-8', mode='r+') content = f.read() print(content) f.write('人的一切痛苦,本質都是對於本身無能的憤怒。') f.close() # 錯誤示例(先寫再讀)(utf-8中文三個字節,英文一個字節,先讀時換行和標點對不上都會致使亂碼和報錯) f = open('文件的讀寫', encoding='utf-8', mode='r+') f.write('123456789') content = f.read() print(content) f.close()
# .tell 獲取光標的位置 單位字節。 f = open('文件的讀寫', encoding='utf-8') print(f.tell()) content = f.read() print(content) print(f.tell()) f.close() # .seek 調整光標的位置 f = open('文件的讀寫', encoding='utf-8') f.seek(7) content = f.read() print(content) f.close() # .flush 強制刷新(強制保存) f = open('文件的其餘功能', encoding='utf-8',mode='w') f.write('123456') f.flush() f.close()
# 優勢1:不用手動關閉文件句柄 with open('文件的讀',encoding='utf-8') as f1: print(f1.read()) # 優勢2:一個語句操做多個文件句柄 with open('文件的讀', encoding='utf-8') as f1,\ open('文件的寫', encoding='utf-8', mode='w')as f2: print(f1.read()) f2.write('123456') # 缺點:它是在必定時間內關閉。
文件操做的改接口
文件操做改的流程
具體代碼:
#簡潔版 import os #1.以讀的模式打開原文件。 #2.以寫的模式建立一個新文件。 with open('文件操做的改',encoding='utf-8') as f1,\ open('文件操做的改.bak',encoding='utf-8',mode='w') as f2: #3.將原文件的內容讀出來修改爲新內容,寫入新文件。 old_content = f1.read() new_content = old_content.replace('Jarvis', 'jarvis') f2.write(new_content) os.remove('文件操做的改') os.rename('文件操做的改.bak','文件操做的改') # 進階版 import os #1.以讀的模式打開原文件。 #2.以寫的模式建立一個新文件。 with open('alex自述',encoding='utf-8') as f1,\ open('alex自述.bak',encoding='utf-8',mode='w') as f2: #3.將原文件的內容讀出來修改爲新內容,寫入新文件。 for line in f1: new_line = line.replace('Jarvis', 'jarvis') f2.write(new_line) os.remove('文件操做的改') os.rename('文件操做的改.bak','文件操做的改') # 有關清空的問題: # 關閉文件句柄,再次以w模式打開此文件時,纔會清空。 with open('文件的寫', encoding='utf-8',mode='w') as f1: for i in range(9): f1.write('12345')