Python零基礎入門(12)-------文件讀寫
數據類型:指向一個特定的文件 。不管是文本或者文檔。或者其他媒體文件。
聲明方式: open(‘路徑‘ , ‘模式‘ , encoding = ‘編碼‘);
(1)路徑 例如:‘C:\\Data\\temp.txt’ 斜杠需要轉義,所以要寫2個斜杠。 加 r 忽略轉義 r‘C:\Data\temp.txt‘
(2)模式
區分下文件的形式有2種
【1】 文本
模式有
r 讀 read 讀取文本
w 寫 write 寫入文本 ,寫模式會將內容替換掉
rw 讀寫
a 追加 append 向文本中追加內容
【2】二進制(也稱之為流)
b
(3)encoding 編碼 編碼有 ACSII UTF8 GBK GB2312 .......還有很多
操作:
(1)我們在D盤的data文件夾下建立一個 temp.txt 在裏面寫入 歡迎使用Python
(2)接下來我們將文件讀取輸出到控制臺上
我們通過 f.read() 方法將 temp.txt 文本文件的內容讀取出來 (但是但是我們文本的換行卻使用轉義字符 \n 顯示了出來)
(3)接下來使用 print() 方法將將 f.read() 的內容輸出
發現沒有輸出任何內容,這個是為什麽呢?
原因是應為我們的 read() 函數的機制有一個指針,在讀取的時候移動指針,當read結束的時候指針已經移動到了結尾。所以。當我們調用 read() 函數的時候,指針繼續移動,卻讀不到任何內容,所以打印出空的
解決方法:
【1】重新創建文件的實例 這種比較麻煩
【2】 seek(0) 將指針重新移動到開頭
(4) 讀取完,我們不需要在繼續操作了,可以調用 close() 方法關閉
(5) read(num) 指定讀取數量 【註:read() 不指定讀取數量則一次性讀取所有信息,假設文件很大,那麽讀取效率問題】
可以看到指定參數讀取多少個字符
(6) readlines() 讀取行,返回一個數組
(7) readline() 讀取一行 ,調用一次,讀取一行。
循環輸出 :為什麽會看到隔一行呢? 因為print() 函數本身帶一個 \n 換行。 可以指定print() 函數的第二個參數 end,結束符號
(8) 關於編碼的問題
先將我們的 D:\data\temp.txt 另存一下,編碼選UTF-8 。然後我們接著讀取
發現讀取的時候拋出了一個異常。
這個時候就使用 encoding 參數,讀取就正常了
我們新建一個 write.txt 文件進行寫入操作 (不創建也可以,你open的時候也會幫你創建)
(9) write(str) 寫入,返回寫入字符的長度
打開文本卻發現什麽都沒有。
我們write(str) 只是將文本寫入到內存中。但是還沒有保存,如果想保存,我們可以調用 flush() 或者你已經操作完了可以調用close()
flush() 方法將內存的操作進行映射到文本文件上 (不關閉文件情況下,輸出緩存到硬盤上)
(10) writelines(list) 寫入多個
產生文件並寫入內容
我們往 temp.txt 中追加內容
附錄
關於路徑:
當我們省略掉盤符的時候,他是從系統的環境變量中找到Python的安裝目錄找文件的
引用 os 使用 os.getcwd() 方法可以獲取我們Python的安裝目錄
os.chdir(path) 指定操作目錄
關於 f.close() 即使我們不手動close() 內存到一定程度也會自動回收。不close()是一個不好的編程習慣
當然 Python 提供了一種了一種上下文的語法 代碼段執行完成之後會自動調用回收 (應用場景,文件讀寫,數據庫讀寫)
with 後面就是上下文的語法
Python零基礎入門(12)-------文件讀寫