Day 2

紅綠燈發表於2019-03-23

學習內容

  • Python檔案讀寫

檔案路徑

  • 指定檔案路徑

    路徑分為絕對路徑與相對路徑,絕對路徑從根目錄開始,而相對路徑是相對於程式的工作目錄,cwd即“當前工作目錄”。

    os.getcwd()可取得當前工作目錄路徑,路徑的資料型別為str

    路徑中資料夾之間的分割符為一個 \ ,但路徑作為字串,其中的\需要再加一個\進行轉義,故輸入\\作為分隔符。

    os.chdir()接受一個路徑(字串),將cwd改為此路徑,若路徑不存在,則丟擲FileNotFoundError

  • 相對路徑表示

    .\ cwd

    ..\ cwd 的父資料夾


os模組

os.makedirs()建立資料夾

os.listdir() 獲取引數路徑下檔案列表,返回型別為list

os.path模組包含與檔名和檔案路徑相關的函式

os.path.abspath()返回引數的絕對路徑。

os.path.isabs()判斷是否為絕對路徑,返回布林值。

os.path.relpath(path, start) 返回start(預設為cwd)到path的相對路徑(字串)。

os.path.basename()獲取路徑中最後一個\後的內容(字串),dirname()則返回\前的內容。

os.path.split()相當於使用了basename()dirname(),返回一個含有兩個元素的tuple。 因為路徑為str型別,故可使用字串的split()方法分割出每一層資料夾的名稱,系統中路徑的分隔符存於os.path.sep變數。

檢查路徑

os.path.exists() 是否存在。

os.path.isdir() 是否為路徑。

os.path.isfile() 是否為檔案。

若路徑本身不存在,則都返回False

os.path.getsize() 獲取檔案位元組數。

# 遍歷目錄下檔案,統計所有檔案的總位元組數
path = 'C:\\Game\\Python'
size = 0
for fileName in os.listdir(path):
    size = size + os.path.getsize(os.path.join(path,fileName))
    # size = size + os.path.getsize(path + os.sep + fileName) 等同於上一行
print(size)
複製程式碼

os.path.join()連線兩端路徑,並在之間新增分割符。

檔案讀寫與shelve模組

`open()`接受一個路徑,返回一個**File**物件
第二引數
‘w’寫模式 在close前write()方法寫入的內容將全部覆蓋原檔案內容
Write方法返回一個數字,即寫入內容的位元組數
‘wb’ 寫二進位制模式 可用於寫入Web頁面內容,二進位制寫入模式下可儲存文字中的“Unicode編碼”
‘a’新增模式 則將寫入內容新增到原內容後
複製程式碼

File物件方法 read()返回檔案的內容(str) readlines() 逐行讀取,返回一個字串list writable() 是否可寫 readable() 可讀


shelve模組檔案讀寫

>>> shelveFile = shelve.open('myData')
    animalList = ['dog','cat','bird','fish']
    shelveFile['animal'] = animalList
    fruitsList = ['apple','banana','pineapple','watermelon']
    shelveFile['fruits'] = fruitsList
    shelveFile.close()

>>> a = shelve.open('myData')
>>> a['animal']
['dog', 'cat', 'bird', 'fish']

>>> list(a)
['animal', 'fruits']

>>> list(a.keys())
['animal', 'fruits']

>>> list(a.values())
[['dog', 'cat', 'bird', 'fish'],
['apple', 'banana', 'pineapple', 'watermelon']]	

複製程式碼

pprint.pformat() 能將傳入的列表或字典內容轉化成文字字串,通過將字串寫入.py檔案中,使得該檔案成為可import的模組。

webbrowser.open() 啟動瀏覽器訪問引數列表中的url。