《Python編程:從入門到實踐》總結_Day04
前言
是在原有文章的基礎上直接擴充更新還是將其作為單獨的系列文章呢?思慮再三,還是決定把接下來的Day01-Day05的總結獨立出來。此系列是關于《Python編程:從入門到實踐》的總結,亦可看作是在我上一篇文章的基礎上的加強版本,所以大家看到有些部分沒有從淺入深的一個過程或者是沒頭沒腦也請不要驚訝。由于筆者(沒錯就是我)水平實在有限,歡迎大家在評論區或者私聊我進行批評指正,閑話少說,我們開始吧。
《Python編程:從入門到實踐》總結_Day01
《Python編程:從入門到實踐》總結_Day02
《Python編程:從入門到實踐》總結_Day03
《Python編程:從入門到實踐》總結_Day04
《Python編程:從入門到實踐》總結_Day05
上一篇文章請見《編程小白的第1本Python入門書》總結
- Here!
1. 文件
1.1 打開&讀取&文件
-
with
關鍵字
該關鍵字是python會將打開的文件在使用后將其關閉。python自會選擇比較合適的關閉時機,而不需要我們手動關閉。 -
open():
該函數用于打開文件,其中參數是文件所在的路徑以及文件名稱。
```python
with open(filename) as open_file:
* **read()**:
讀取打開的文件中的內容,由于該方法在到達文件尾的時候返回一個空字符串,而這個字符串打印出來顯示就是一個空格。(可用rstrip()函數將其刪掉)
```python
contents = object_file.read()
- 逐行讀取數據
1、可使用for循環,for循環是每次讀取一條語句,并可對其進行操作。
with open("pi_digits.txt") as object_file:
for line in lines:
line_substitute = line.replace("Python", "c")
print(line_substitute)
2、readline()方法,該方法以條為單位,一次性讀取所有語句。
with open("pi_digits.txt") as object_file:
lines = object_file.readlines()
1.1 寫文件
write()
:
首先要在打開文件的后面定義一個寫入模式的參數,若文件中之前存在內容,則新寫入的數據會覆蓋之前文本中的數據(在返回對象前清空文件)。
?:Python只能將字符串寫入文本中,寫入文件不會像讀取文件那樣在文本末尾添加換行符,所以在寫入多行數據的時候,需要添加換行符。
with open(filename, "w") as file_object:
file_object.write("I really love programming\n")
file_object.write("I love programming.")
- 附加模式
給原有文件添加內容,而不是覆蓋原有文件,寫入的時只需將打開文件的參數改為“附加模式”(a)即可,其余的操作方式與覆蓋式寫入模式一致。
with open(filename, "a") as file_object:
file_object.write("I really love programming\n")
file_object.write("I love programming.")
2. 異常處理
異常處理的必要與好處我根據書中所說總結有如下幾點:
1、可以盡量避免程序的崩潰使不懂技術的用戶困惑;
2、可以避免攻擊者因為程序的錯誤而獲得你的程序中的部分信息,進而攻擊你的代碼;
3、程序不會因為在運行過程中出現異常而終止程序;
- try-except代碼塊:
用來捕獲異常,告知python,若是這些代碼中引發了異常,該怎么辦
try:
print(5/0)
except:
print("You can't divide by zero")
我結合上面的代碼來解釋一下,上面的代碼塊所表達的是,如果try
中的代碼塊運行成功,那么代碼會跳過except
代碼塊中的內容,然后繼續向下執行。而若是try
中的代碼塊運行的錯誤,那么會輸出except
代碼塊中的內容,然后繼續向下執行。
- try-except-else代碼塊:
Python嘗試執行try
中的代碼塊,except
代碼塊會在try
中的代碼運行出現錯誤時運行(不會運行else
代碼塊)。而若是在try
代碼塊運行成功之后才會執行else
中的代碼塊。
try:
print(5/0)
except:
print("You can't divide by zero")
else:
print("Mr_Hou")
可以修改try
代碼塊中的除數,通過控制try
中的代碼塊正確與錯誤,再結合不同情況下的輸出來學習這個知識。
3. JSON格式
關于這部的知識我覺得網上的的解答比書中的更加清晰和簡潔明了,更能直擊其本質。
第一種類型是標量scalar,也就是一個單獨的字符串string或數字numbers,比如“成都”這個單獨的詞。
第二種類型是序列sequence,也就是若干個相關的數據按照一定順序并列在一起,又叫做數組array,或者列表list,比如“成都,重慶”。
第三種類型是映射mapping,也就是一個名/值name/value,即數據有一個名稱,還有一個與之相對應的值,這又稱作散列hash或字典dictionary,比如“蓉城:成都”。
1.并列的數據之間用逗號(,)分隔;
2.映射用冒號(:)表示;
3.并列數據的集合(數組)用方括號([])表示;
4.映射的集合(對象)用大括號({})表示
以上四條規則,就是json格式的所有內容。
json.dump()
::將數據存儲為json格式。
with open(filename, "w") as obj_file:
json.dump(user_number, obj_file)
json.load()
:將json格式的數據加載進內存來使用。
with open(filename) as open_file:
favorite_name = json.load(open_file)
4. 重構
在代碼可以正常運行基礎上,將代碼劃分為一系列完成具體工作的函數。可以讓代碼更清晰、易于理解和擴展。
5. 問題
在學習到異常處理的部分的時候,這種捕獲異常的方式讓我聯想到if...else
代碼塊,在我看來二者之間非常相似(好吧,我不得不承認,“非常相似”這個詞是我總結時候寫的,當時給我的感覺就是,這TM不就是一摸一樣嘛!!),所以我在網上搜索到的一篇博客回答了我的疑問:
if…else在計算機里執行的時候是有條件的,也就是根據一個具體的條件執行,只有判斷這個條件的真假才能進行下一步的操作,也就是我們所說的流程控制,條件為真時走操作1,為假時走操作2。
而try…catch則是用于捕獲異常,常用于我們一段代碼可能會有異常的時候使用,程序執行時永遠先走try,出錯的時候才會走catch拋出異常。
雖然這篇文章解答的是try...catch
與if...else
代碼塊之間的區別,但是我覺得原理應該是一樣的,故放上引用供大家參考。
智能推薦
vue入門day04
vue的元素控制指令 v-show、v-if 頁面顯示如下: 通過如上所示,應該能看得出來,v-show取值為false時,只是隱藏dom(display:none)。 下面演示v-if 頁面顯示如下: 相信大家能夠看得出來v-show與v-if的區別了吧?v-if的值為false的時候,dom壓根就不會創建...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
猜你喜歡
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...