小白學 Python(18):基礎文件操做

人生苦短,我選Pythonhtml

前文傳送門python

小白學 Python(1):開篇git

小白學 Python(2):基礎數據類型(上)github

小白學 Python(3):基礎數據類型(下)微信

小白學 Python(4):變量基礎操做數據結構

小白學 Python(5):基礎運算符(上)函數

小白學 Python(6):基礎運算符(下)學習

小白學 Python(7):基礎流程控制(上)測試

小白學 Python(8):基礎流程控制(下)編碼

小白學 Python(9):基礎數據結構(列表)(上)

小白學 Python(10):基礎數據結構(列表)(下)

小白學 Python(11):基礎數據結構(元組)

小白學 Python(12):基礎數據結構(字典)(上)

小白學 Python(13):基礎數據結構(字典)(下)

小白學 Python(14):基礎數據結構(集合)(上)

小白學 Python(15):基礎數據結構(集合)(下)

小白學 Python(16):基礎數據類型(函數)(上)

小白學 Python(17):基礎數據類型(函數)(下)

絕對路徑和相對路徑

在介紹文件操做以前,咱們先介紹兩個概念,絕對路徑和相對路徑。

先百度下看下百度的解釋:

  • 絕對路徑:是指目錄下的絕對位置,直接到達目標位置,一般是從盤符開始的路徑。完整的描述文件位置的路徑就是絕對路徑。
  • 相對路徑:相對路徑就是指由這個文件所在的路徑引發的跟其它文件(或文件夾)的路徑關係。

不知各位同窗看懂了沒,沒看懂我再舉個栗子給各位加深下理解。

絕對路徑

好比咱們要描述 Demo.py 的絕對路徑,那麼就是: F:/project/python-learning/base-data-def/Demo.py

相對路徑

相對路徑是描述當前位置相對於目標位置的路徑,好比當前咱們存在的路徑是 F:/project/python-learning/ ,咱們仍是要描述上面的那個 Demo.py ,那麼它的相對路徑是 ./base-data-def/Demo.py

打開文件

Python 爲咱們提供了打開文件的內置函數 open()

經常使用語法:

open(file, mode='r')

完整語法:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

參數說明:

  • file: 必需,文件路徑(相對或者絕對路徑)。
  • mode: 可選,文件打開模式
  • buffering: 設置緩衝
  • encoding: 通常使用 utf-8
  • errors: 報錯級別
  • newline: 區分換行符
  • closefd: 傳入的file參數類型

mode 參數經常使用值:

模式 描述
t 文本模式 (默認)。
x 寫模式,新建一個文件,若是該文件已存在則會報錯。
b 二進制模式。
+ 打開一個文件進行更新(可讀可寫)。
r 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。
rb 以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。通常用於非文本文件如圖片等。
r+ 打開一個文件用於讀寫。文件指針將會放在文件的開頭。
rb+ 以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。通常用於非文本文件如圖片等。
w 打開一個文件只用於寫入。若是該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。若是該文件不存在,建立新文件。
wb 以二進制格式打開一個文件只用於寫入。若是該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。若是該文件不存在,建立新文件。通常用於非文本文件如圖片等。
w+ 打開一個文件用於讀寫。若是該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。若是該文件不存在,建立新文件。
wb+ 以二進制格式打開一個文件用於讀寫。若是該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。若是該文件不存在,建立新文件。通常用於非文本文件如圖片等。
a 打開一個文件用於追加。若是該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容以後。若是該文件不存在,建立新文件進行寫入。
ab 以二進制格式打開一個文件用於追加。若是該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容以後。若是該文件不存在,建立新文件進行寫入。
a+ 打開一個文件用於讀寫。若是該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。若是該文件不存在,建立新文件用於讀寫。
ab+ 以二進制格式打開一個文件用於追加。若是該文件已存在,文件指針將會放在文件的結尾。若是該文件不存在,建立新文件用於讀寫。

光說不練假把式,下面開啓咱們第一個示例:

str1 = open('F:/project/python-learning/base-data-def/Demo.py', mode='r').read()
print(str1)

打印結果我就不貼出來了,正常打印了咱們前幾篇文章的示例代碼。

編碼格式

根據編碼格式的不一樣,能夠將文件分爲文本字符和二進制字節。

咱們平常看到的都是文本字符,可是文本字符在保存計算機的時候都會轉變成二進制字節,這時候,就要考慮到編碼的問題了。

咱們看下轉換的示例圖:

值得注意的是,在 Python3 中,文件默認的編碼方式是 UTF-8 ,文本字符的經常使用的編碼有 ASCII 和 Unicode 。

說了這麼多,仍是看一個示例代碼吧:

str2 = '好好學習,每天向上'
print(type(str2))
a = str2.encode('utf-8')
print(type(a))
print(a.decode('utf-8'))

打印結果以下:

<class 'str'>
<class 'bytes'>
好好學習,每天向上

能夠看到,咱們將字符串 encode() 編碼之後,類型變成了 byte

若是咱們使用編碼 gbk 的方式解碼上面的 a 會怎麼樣呢?

print(a.decode('gbk'))

結果以下:

Traceback (most recent call last):
  File "F:/project/python-learning/base-file/Demo.py", line 10, in <module>
    print(a.decode('gbk'))
UnicodeDecodeError: 'gbk' codec can't decode byte 0x8a in position 26: incomplete multibyte sequence

告訴咱們不能使用 gbk 來進行解碼操做。

這個其實很好理解,比如咱們將中文翻譯成爲了英文(編碼),而後咱們經過日文翻譯想要將英文翻譯回中文(解碼),那麼這個日文翻譯確定會罵你腦子有病。

OS 模塊

前面咱們介紹了經過內置函數來操做文件,咱們還能夠經過 OS 模塊更簡單的l哎操做文件。

OS 模塊是和操做系統相關的模塊。

爲了演示,先創建一個 test.txt 文件。

首先,咱們打開這個文件:

import os
os.chdir('F:/project')
file = open('test.txt')

讀取這個文件並打印:

print(file.read())

結果以下:

微信公衆號:極客挖掘機

而後咱們在下面再加一些內容:

file.write('關注公衆號,好好學習,每天向上')

而後發現執行報錯了:

Traceback (most recent call last):
  File "F:/project/python-learning/base-file/Demo.py", line 17, in <module>
    file.write('關注公衆號,好好學習,每天向上')
io.UnsupportedOperation: not writable

從報錯信息能夠看出,是咱們當前讀取權限的問題,由於咱們讀取時是隻讀權限,沒法寫入,因此稍微修改下上面讀取文件的代碼:

import os
os.chdir('F:/project')
file = open('test.txt', mode='a+')
file.write(' \n 關注公衆號,好好學習,每天向上')

執行完成後咱們再看下咱們的測試文件:

寫入成功。

咱們測試一個有意思的事情,若是同一個文件咱們讀取兩次會怎麼樣?

import os
os.chdir('F:/project')
file = open('test.txt')
print(file.read())
print(file.read())

打印結果以下:

微信公衆號:極客挖掘機
關注公衆號,好好學習,每天向上

咱們明明在代碼中打印了兩次,爲何只顯示了一次呢?

由於 read() 讀取全部內容,讀取完後,遊標是指在最後的,再日後讀取確定就讀不到內容了。

好了,本篇的內容就到此爲止了,但願各位同窗能動手練習下示例代碼。

示例代碼

本系列的全部代碼小編都會放在代碼管理倉庫 Github 和 Gitee 上,方便你們取用。

示例代碼-Github

示例代碼-Gitee

原文出處:https://www.cnblogs.com/babycomeon/p/11832779.html

相關文章
相關標籤/搜索