1. 程式人生 > >Python零基礎入門(12)-------文件讀寫

Python零基礎入門(12)-------文件讀寫

顯示 二進制 通過 轉義 int() 找文件 編程習慣 取數 --

數據類型:指向一個特定的文件 。不管是文本或者文檔。或者其他媒體文件。

聲明方式: 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)-------文件讀寫