搜尋
首頁後端開發Python教學Python基礎學習總結(八)

Python基礎學習總結(八)

Jul 14, 2017 pm 06:13 PM
python基礎總結

10.檔案和例外

  學習處理文件,讓程式快速的分析大量數據,學習處理錯誤,避免程式在面對意外時崩潰。學習異常,異常是python創建的特殊對象,用於管理程式運行時出現的錯誤,提高程式的適用性,可用性,和穩定性。

  學習模組json,json可以用來保存使用者數據,避免程式意外停止執行時遺失。

  學習處理文件和保存數據,可以讓程式使用起來更容易,用戶可以選擇輸入什麼類型的數據,並選擇在什麼時候輸入,並且可以在使用程序處理一些事後關閉程序,下次在繼續做。

  學習處理異常,幫助應對文件不存在的情況,以及處理各種可能讓程式崩潰的問題,讓程式面對各種錯誤時更健壯,不管這些錯誤資料源自於無意識的錯誤,還是源自破壞程序的惡意企圖。

10.1從檔案讀取資料

  讀取文件可以一次讀取整個文件,也可以逐行讀取文件。取決於檔案的大小自行選擇讀取方法。

10.1.1讀取整個檔案

  在 Python 中,讀寫檔案有 3 個步驟:

  1.呼叫 open()函數,傳回一個 File 物件。

  2.呼叫 File 物件的 read()或 write()方法。

  3.呼叫 File 物件的 close()方法,關閉該檔案。

  用 open()函數開啟檔案 

#  with open(檔名) as file_object:

             contents = file_object.read()   #沒有呼叫關閉方法,with自動關閉檔案。

  會在檔案目前目錄下尋找檔案開啟。

  read()方法讀取檔案內容

  File 物件的 read()方法:

#>>> helloContent = helloFile.read()

>>> helloContent

'Hello world!'

#

  可以使用 readlines()方法,從該檔案取得一個字串的清單。列表中的每個字串就是文字中的每一行。

10.1.2檔案路徑

  注意斜線、Windows 上的倒斜線以及 OS X 和 Linux 上的正斜線。

  with open('text_files\filename.txt') as file_object。

  有兩種方法指定一個檔案路徑。

  •   “絕對路徑”, 總是從根資料夾開始。
  •   “相對路徑”,它相對於程式的目前工作目錄。

  絕對檔案路徑

  Win:

  file_path = 'C:\Users\ehmatthes\other_files\text_files\filename.txt’

  with open(file_path) as file_object:

 

  Linux和OS:

#  file_path = '/home/ehmatthes/other_files/text_files/filename.txt'

  with open(file_path) as file_object:

 

  還有點(.)和點點(..)資料夾。它們不是真正的資料夾,而是可以在路徑中使用的特殊名稱。單一的句點(“點”)用作資料夾目名稱時,是“這個目錄”的縮寫。兩個句點(「點點」)意思是父資料夾。

  處理絕對路徑與相對路徑

#  1.os.path 模組提供了一些函數,傳回一個相對路徑的絕對路徑,以及檢查給定的路徑是否為絕對路徑。

  2.呼叫 os.path.abspath(path)將傳回參數的絕對路徑的字串。這是將相對路徑轉換為絕對路徑的簡單方法。

  3.呼叫 os.path.isabs(path),如果參數是絕對路徑,就回傳 True,如果參數是 一個相對路徑,就回傳 False。

  4.呼叫 os.path.relpath(path, start)將傳回從 start 路徑到 path 的相對路徑的字串。

  5.如果沒有提供 start,就使用目前工作目錄作為開始路徑。

10.1.3逐行讀取檔案資料

  for line in lines:

  replace()替換函數

#  file.replace(‘dog’, ‘cat’)

10.2寫入檔案

10.2.1寫入空檔

  open(‘file’, ‘w’)提供兩個實參,檔案名稱和運算

  1.讀取模式 ’r’

  2.寫入模式 ‘w’

  3.附加模式 ‘a’

  4.讀取與寫入模式 ‘r+’

#  5.如果省略模式實參,python將只能預設唯讀模式開啟檔案。

  6.如果檔案不存在,open將自動產生檔案。

  7.輸入是Input,輸出是Output,因此,我們把輸入輸出統稱為Input/Output,或者簡寫為IO。

  8.輸入密碼時,如果想要不可見,需要利用getpass 模組中的 getpass方法。

  注意,如果以寫入模式 ‘w’ 打開,如果檔案已經存在,將清空檔案。

  如果傳遞給 open()的檔案名稱不存在,寫入模式和新增模式都會建立一個新的空檔案。在讀取或寫入檔案後,呼叫 close()方法,然後才能再次開啟該檔案。

  Python只能將字串寫入文字文件,要儲存數值資料進入文字文件,需要用函數str將其轉換為字串格式。

#>>> baconFile = open('bacon.txt', 'w')

>>> baconFile.write('Hello world!\n')

13

 >>> baconFile.close()

>>> baconFile = open('bacon.txt', 'a')

>>> baconFile.write('Bacon is not a vegetable.')

25

>>> baconFile.close()

>>> baconFile = open('bacon.txt')

>>> content = baconFile.read()

>>> baconFile.close()

>>> print(content)

 Hello world! Bacon is not a vegetable.

#

  首先,我們以寫入模式開啟 bacon.txt。因為還沒有 bacon.txt,Python 就創建了一 個。在開啟的檔案上呼叫 write(),並向 write()傳入字串參數'Hello world! \n',將字串寫入文件,並傳回寫入的字元數,包括換行符號。然後關閉該文件。

  為了將文字加入到檔案已有的內容,而不是取代我們剛剛寫入的字串,我們就以新增模式開啟該檔案。向該檔案寫入'Bacon is not a vegetable.',並關閉它。最後,為了將文件的內容印到螢幕上,我們以預設的讀取模式開啟該文件,呼叫 read(),將得到的內容保存在 content 中,關閉該文件,並列印 content。

  請注意,write()方法不會像 print()函數那樣,在字串的末尾自動添加換行字 符。必須自行添加該字元。

用 shelve 模組儲存變數

  利用 shelve 模組,你可以將 Python 程式中的變數儲存到二進位的 shelf 檔案中。 這樣,程式就可以從硬碟中恢復變數的資料。 shelve 模組讓你在程式中加入「儲存」 和「開啟」功能。例如,如果執行一個程序,並輸入了一些配置設置,就可以將這 些設置保存到一個 shelf 文件,然後讓程序下一次運行時加載它們。

#>>> import shelve

>>> shelfFile = shelve.open('mydata')

>>> cats = ['Zophie', 'Pooka', 'Simon']

>>> shelfFile['cats'] = cats

>>> shelfFile.close()

#  在 Windows 上執行前面的程式碼,你會看到在目前工作目錄下有 3 個新檔案: mydata.bak、mydata.dat 和 mydata.dir。在 OS X 上,只會建立一個 mydata.db 檔案。

   這些二進位檔案包含了儲存在 shelf 中的資料。這些二進位檔案的格式並不重要,你只需要知道 shelve 模組做了什麼,而不必知道它是怎麼做的。這個模組讓你不用操心如何將程式的資料儲存到檔案中。 你的程式稍後可以使用 shelve 模組,重新開啟這些檔案並取出資料。 shelf 值不必用讀取模式或寫入模式打開,因為它們在打開後,既能讀又能寫。

#>>> shelfFile = shelve.open('mydata')

>>> type(shelfFile)

>>> shelfFile['cats'] ['Zophie', 'Pooka', 'Simon']

>>> shelfFile.close()

#  就像字典一樣,shelf 值有 keys()和 values()方法,傳回 shelf 中鍵和值的類似列表的值。因為這些方法傳回類似列表的值,而不是真正的列表,所以應該將它們傳 遞給 list()函數,以取得列表的形式。

#>>> shelfFile = shelve.open('mydata')

>>> list(shelfFile.keys())

['cats']

>>> list(shelfFile.values())

[['Zophie', 'Pooka', 'Simon']]

>>> shelfFile.close()

#  建立檔案時,如果你需要在 Notepad 或 TextEdit 這樣的文字編輯器中讀取它們, 純文字就非常有用。但是,如果想要保存 Python 程式中的數據,那就使用 shelve 模組。

10.2.2寫入多行

  函數write()不會在寫入的文字後面自動換行,需要自己加入換行符\n。

10.3 OS操作

10.3.1用 os.makedirs()建立新資料夾

  程式可以用 os.makedirs()函數建立新資料夾(目錄)。

#>>> import os

>>> os.makedirs('C:\\delicious\\walnut\\waffles')

#

  這不僅將創建 C:\delicious 資料夾,也會在 C:\delicious 下建立 walnut 資料夾, 並在 C:\delicious\walnut 中建立 waffles 資料夾。也就是說,os.makedirs()將建立所有 必要的中間資料夾,目的是確保完整路徑名存在。

10.3.2 os.path 模組

  os.path 模組包含了許多與檔案名稱和檔案路徑相關的有用函數。

  1.查看檔案大小與資料夾內容

  •   一旦有辦法處理檔案路徑,就可以開始蒐集特定檔案和資料夾的資訊。 os.path 模組提供了一些函數,用於查看檔案的位元組數以及給定資料夾中的檔案和子資料夾。
  •   呼叫 os.path.getsize(path)將傳回 path 參數中檔案的位元組數。
  •   呼叫 os.listdir(path)將傳回檔案名稱字串的列表,包含 path 參數中的每個檔案(請注意,這個函數在 os 模組中,而不是 os.path)。
  •   使用了 os.path.join()來連接 資料夾名稱和目前的檔案名稱。

  2.檢查路徑有效性

  •   如果你提供的路徑不存在,許多 Python 函數就會崩潰並報錯。 os.path 模組提 供了一些函數,用於偵測給定的路徑是否存在,以及它是檔案還是資料夾。
  •   如果 path 參數所指的檔案或資料夾存在,呼叫 os.path.exists(path)將傳回 True, 否則傳回 False。
  •   如果 path 參數存在,並且是一個文件,呼叫 os.path.isfile(path)將傳回 True,否 則傳回 False。
  •   如果 path 參數存在,並且是一個資料夾,呼叫 os.path.isdir(path)將傳回 True, 否則傳回 False。

10.4組織文件

10.4.1 shutil 模組

  shutil(或稱為 shell 工具)模組中包含一些函數,讓你在 Python 程式中複製、移動、改名和刪除檔案。要使用shutil 的函數,首先需要 import shutil。

10.4.1.1複製檔案和資料夾

  shutil 模組提供了一些函數,用於複製檔案和整個資料夾。

  1.呼叫shutil.copy(source, destination),將路徑 source 處的檔案複製到路徑 destination 處的資料夾(source 和 destination 都是字串)。

  2.如果 destination 是一個檔案名,它將 作為被複製檔案的新名字。該函數傳回一個字串,表示被複製檔案的路徑。

#>>> import shutil, os

>>> os.chdir('C:\\')

>>> shutil.copy('C:\\spam.txt','C:\\delicious')

'C:\\delicious\\spam.txt'

>>> shutil.copy('eggs.txt', 'C:\\delicious\\eggs2.txt')

'C:\\delicious\\eggs2.txt'

#10.4.1.2檔案與資料夾的移動與改名

  呼叫 shutil.move(source, destination),將路徑 source 處的資料夾移到路徑 destination,並傳回新位置的絕對路徑的字串。

  如果 destination 指向一個資料夾,source 檔案將會移動到 destination 中,並保持原來的檔案名稱。

10.5異常

  Python使用被稱為異常的特殊物件來管理程式執行時發生的錯誤。

  每當python發生不知所措的錯誤時就會創建一個異常。

  如果編寫了處理異常的情況,程式將會繼續進行,不然程式將會停止,並傳回trackback,包含有關異常的報告。

  異常使用 try-except 程式碼區塊來處理。執行指定的操作,告訴python改怎麼辦。使用 try-except 程式碼區塊,即使程式遇到錯誤,也會繼續運行,顯示自己編寫的友善錯誤提示,讓使用者知道哪裡錯了。

1.ZeroDivisionError異常 

  除數為0時,發生的異常。

2.TypeError異常

  只允許整數和浮點數類型的參數。資料類型檢查可以用內建函數isinstance()實作

#def my_abs(x):

#    if not isinstance(x, (int, float)):

        raise TypeError('bad operand type')

    if x >= 0:

        return x

##    else:

        return -x

##ValueError異常

 

#

3.記錄錯誤

  Python內建的logging模組可以非常容易地記錄錯誤訊息。

4.拋出錯誤

  如果要拋出錯誤,首先根據需要,可以定義一個錯誤的class,選擇好繼承關係,然後,用raise語句拋出一個錯誤的實例。

10.6儲存資料

  使用json模組來儲存資料。 Json資料的格式並非python專用可以和用其他程式語言的人分享。是一種輕便格式,很有用,也易於學習。

  JSON(JavaScript Object Notation)格式最初是為JavaScript開發的,但隨後成了一種常見格式,被用與眾多語言。

  使用json.dump() 和json.load()

  json.dump()接受兩個實參,要儲存的資料以及可用於儲存資料的檔案物件。

  1. 儲存一組數字的程式 json.dump()
  2. 將數字讀取到記憶體的程式 json.load()

10.6.2儲存與讀取使用者產生的資料

  json.dump和json.load結合使用,分別是儲存和載入資料。

10.6.3重構

  1.程式碼可以正確運行,但可做進一步的改進-將程式碼劃分為一系列完成具體工作的函數。這樣的過程叫做重構。重構讓程式碼更清晰,易於理解,更容易擴充。

  2.將大部分邏輯放到一個或多個函數內。

10.6.4小結

  1.學習了讀取文件,整個文件讀取和一行讀取,操作文件,打開,讀取模式,寫入模式,附加模式,讀取加寫入模式。

  2.異常處理try-except-else程式碼區塊的使用方法。異常類型。操作數據,保存和讀取數據,json模組的使用,dump和load的使用,學會重構程式碼。

10.7調試

1.斷言

  凡是用print()來輔助查看的地方,都可以用斷言(assert)來取代。

#def foo(s):

    n = int(s)

    assert n != 0, 'n is zero!'

    return 10 / n

 

def main():

    foo('0')

#  assert的意思是,表達式n != 0應該是True,否則,根據程式運行的邏輯,後面的程式碼一定會出錯。

 

  如果斷言失敗,assert語句本身就會拋出AssertionError。

以上是Python基礎學習總結(八)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Python中有可能理解嗎?如果是,為什麼以及如果不是為什麼?Python中有可能理解嗎?如果是,為什麼以及如果不是為什麼?Apr 28, 2025 pm 04:34 PM

文章討論了由於語法歧義而導致的Python中元組理解的不可能。建議使用tuple()與發電機表達式使用tuple()有效地創建元組。 (159個字符)

Python中的模塊和包裝是什麼?Python中的模塊和包裝是什麼?Apr 28, 2025 pm 04:33 PM

本文解釋了Python中的模塊和包裝,它們的差異和用法。模塊是單個文件,而軟件包是帶有__init__.py文件的目錄,在層次上組織相關模塊。

Python中的Docstring是什麼?Python中的Docstring是什麼?Apr 28, 2025 pm 04:30 PM

文章討論了Python中的Docstrings,其用法和收益。主要問題:Docstrings對於代碼文檔和可訪問性的重要性。

什麼是lambda功能?什麼是lambda功能?Apr 28, 2025 pm 04:28 PM

文章討論了Lambda功能,與常規功能的差異以及它們在編程方案中的效用。並非所有語言都支持他們。

什麼是休息時間,繼續並通過python?什麼是休息時間,繼續並通過python?Apr 28, 2025 pm 04:26 PM

文章討論了休息,繼續並傳遞Python,並解釋了它們在控制循環執行和程序流中的作用。

Python的通行證是什麼?Python的通行證是什麼?Apr 28, 2025 pm 04:25 PM

本文討論了Python中的“ Pass”語句,該語句是函數和類等代碼結構中用作佔位符的空操作,允許在沒有語法錯誤的情況下實現將來實現。

我們可以在Python中傳遞作為參數的函數嗎?我們可以在Python中傳遞作為參數的函數嗎?Apr 28, 2025 pm 04:23 PM

文章討論了將功能作為Python中的參數,突出了模塊化和用例(例如分類和裝飾器)等好處。

Python中的 /和//有什麼區別?Python中的 /和//有什麼區別?Apr 28, 2025 pm 04:21 PM

文章在Python中討論 /和//運營商: / for for True Division,//用於地板部門。主要問題是了解它們的差異和用例。 Character數量:158

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器