歡迎大家來到“Python從零到壹”,在這裡我将分享約200篇Python系列文章,帶大家一起去學習和玩耍,看看Python這個有趣的世界。所有文章都将結合案例、代碼和作者的經驗講解,真心想把自己近十年的程式設計經驗分享給大家,希望對您有所幫助,文章中不足之處也請海涵。
Python系列整體架構包括基礎文法10篇、網絡爬蟲30篇、可視化分析10篇、機器學習20篇、大資料分析20篇、圖像識别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的關注、點贊和轉發就是對秀璋最大的支援,知識無價人有情,希望我們都能在人生路上開心快樂、共同成長。
本文源碼下載下傳位址:
同時,作者新開的“娜璋AI安全之家”将專注于Python和安全技術,主要分享Web滲透、系統安全、人工智能、大資料分析、圖像識别、惡意代碼檢測、CVE複現、威脅情報分析等文章。雖然作者是一名技術小白,但會保證每一篇文章都會很用心地撰寫,希望這些基礎性文章對你有所幫助,在Python和安全路上與大家一起進步。
文章目錄
- 一.檔案操作
- 二.CSV檔案操作
- 三.面向對象基礎
- 四.總結
檔案是指存儲在外部媒體上資料的集合,文本檔案編碼方式包括ASCII格式、Unicode碼、UTF-8碼、GBK編碼等。檔案的操作流程為“打開檔案-讀寫檔案-關閉檔案”三部曲。
1.打開檔案
打開檔案調用open()函數實作,其傳回結果為一個檔案對象,函數原型如下:
<variable> = open(<name>, <mode>)
-<name>表示打開檔案名稱
-<mode>表示檔案打開模式
其中mode常見參數包括:
- r: 隻讀,檔案指針将會放在檔案的開頭
- w:隻寫,如果檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除;如果該檔案不存在,建立新檔案
- a: 打開一個檔案用于追加,如果該檔案已存在,檔案指針将會放在檔案的結尾;如果該檔案不存在,建立新檔案進行寫入
- rb: 隻讀二進制檔案,一般用于非文本檔案如圖檔等
- wb: 隻寫二進制檔案,一般用于非文本檔案如圖檔等
- ab: 以二進制格式打開一個檔案用于追加
- w+: 打開一個檔案用于讀寫
open()函數的完整文法如下:
- open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

舉一個簡單的例子:
infile = open("test.txt","r")
注意:使用open()方法一定要保證關閉檔案對象,即調用close()方法。
2.讀寫檔案
(1) 讀檔案
常用檔案讀取方法包括:
- read()傳回值為包含整個文本内容的一個字元串
- readline()傳回值為檔案内容的下一行内容的字元串
- readlines()傳回值為整個檔案内容的清單,清單中每項為一行字元串
示例如下:
infile = open("test.txt","r",encoding="utf8")
data = infile.read()
print(data)
print("")
infile = open("test.txt","r",encoding="utf8")
list_data = infile.readlines()
print(list_data)
輸出結果如下圖所示:
(2) 寫檔案
從計算機記憶體向檔案寫入資料,方法包括:
- write()把含有文本資料或二進制資料集的字元串寫入檔案中
- writelines()針對清單操作,接收一個字元串清單參數,并寫入檔案
outfile1 = open('test.txt','a+',encoding="utf8")
str1 = '\nhello\n'
str2 = 'world\n'
outfile1.write(str1)
outfile1.write(str2)
outfile1.close()
outfile2 = open('test02.txt','w',encoding="utf8")
outfile2.writelines(['hello',' ','world'])
outfile2.close()
infile = open('test.txt','r',encoding="utf8")
data = infile.read()
print(data)
針對test.txt檔案完成追加寫入操作,針對test02.txt檔案完成建立及寫入操作,同時調用write()和writelines()不同方法寫入資料。
3.關閉檔案
檔案讀寫結束後,一定要記住使用close()方法關閉檔案。如忘記使用該關閉語句,則當程式突然崩潰時,該程式不會繼續執行寫入操作,甚至當程式正常執行完檔案寫操作後,由于沒有關閉檔案操作,該檔案可能會沒有包含已寫入的資料。為安全起見,在使用完檔案後需要關閉檔案,建議讀者使用try-except-finally異常捕獲語句,并在finally子句中關閉檔案。
try:
#檔案操作
except :
#異常處理
finally:
file.close()
其他方法包括:
- file.flush():重新整理檔案内部緩沖
- file.next():傳回檔案下一行
- file.seek(offset[, whence]):設定檔案目前位置
- file.tell():傳回檔案目前位置
- file.truncate([size]):截取檔案,截取的位元組通過size指定
4.循環周遊檔案
在資料爬取或資料分析中,常常會涉及到檔案周遊,通常采用for循環周遊檔案内容,一方面可以調用read()函數讀取檔案循環輸出,另一方面也可以調用readlines()函數實作。其兩種方法的對比代碼如下所示:
infile = open('test02.txt', 'r', encoding="utf8")
for line in infile.readlines():
print(line)
print(infile.close())
infile = open('test02.txt', 'r', encoding="utf8").read()
for line in infile:
print(line)
print(infile.close())
輸出結果《靜夜思》如下圖所示,包含TXT檔案和輸出值。
我們在使用Python進行網絡爬蟲或資料分析時,通常會遇到CSV檔案,類似于Excel表格。接着我們補充SCV檔案讀寫的基礎知識。
CSV(Comma-Separated Values)是常用的存儲檔案,逗号分隔符,值與值之間用分号分隔。Python中導入CSV擴充包即可使用,包括寫入檔案和讀取檔案。
1.CSV檔案寫
基本流程如下:
- 導入CSV子產品
- 建立一個CSV檔案對象
- 寫入CSV檔案
- 關閉檔案
# -*- coding: utf-8 -*-
import csv
c = open("test-01.csv", "w", encoding="utf8") #寫檔案
writer = csv.writer(c)
writer.writerow(['序号','姓名','年齡'])
tlist = []
tlist.append("1")
tlist.append("小明")
tlist.append("10")
writer.writerow(tlist)
print(tlist,type(tlist))
del tlist[:] #清空
tlist.append("2")
tlist.append("小紅")
tlist.append("9")
writer.writerow(tlist)
print(tlist,type(tlist))
c.close()
注意,此時會出現多餘空行,我們需要進行簡單的處理,加入參數“newline=‘’”解決。
- ==c = open("test-01.csv", "w", encoding="utf8", newline='')==
2.CSV檔案讀
- 讀取CSV檔案
# -*- coding: utf-8 -*-
import csv
c = open("test-01.csv", "r", encoding="utf8") #讀檔案
reader = csv.reader(c)
for line in reader:
print(line[0],line[1],line[2])
c.close()
在檔案操作中編碼問題是最讓人頭疼的,尤其Python2的時候。但隻需要環境編碼一緻,注意相關轉換也能有效解決,而Python3檔案讀寫操作寫清楚encoding編碼方式就能正常顯示。如果是資料庫、網頁、背景語言,三者編碼方式需要一緻,比如utf8或gbk等,具體問題具體解決吧!後續作者會結合爬蟲講解CSV檔案的操作。
傳統的程式設計方式是面向過程的,根據業務邏輯從上到下執行,而面向對象程式設計是另一種程式設計方式,此種程式設計方式需要使用“類”和“對象”來實作,将函數進行封裝,更接近真實生活的一種程式設計方式。
面向對象是将客觀事物看做屬性和行為的對象,通過抽象同一類對象的共同屬性和行為,形成類,通過對類的繼承和多态實作代碼重用等。對象(Object)是類(Class)的一個執行個體,如果将對象比作房子,那麼類就是房子的設計圖,并在類中定義了屬性和方法。
面向對象的三個基本特征為:
- 封裝:把客觀事物封裝成抽象的類,類中資料和方法讓類或對象進行操作。
- 繼承:子類繼承父類後,它可以使用父類的所有功能,無需重新編寫原有類,并且可以對功能進行擴充。
- 多态:類中定義的屬性或行為,被特殊類繼承後,可以具有不同的資料類型或表現不同的行為,各個類能表現不同的語義,實作的兩種方法為覆寫和重載。
在Python中,類就是一個模闆,模闆裡可以包含多個函數,函數裡實作一些功能;對象則是根據模闆建立的執行個體,通過執行個體對象可以執行類中的函數。如下:
#建立類
class 類名:
#建立類中的函數,self特殊參數,不能省略
def 函數名(self):
#函數實作
#根據類建立對象obj
obj = 類名()
假設需要編寫一個計算長方形面積和周長的程式,其思想是定義兩個變量長和寬,然後再在類中定義計算面積和周長的方法,執行個體化使用。代碼如下:
#-*- coding:utf-8 -*-
class Rect:
def __init__(self, length, width):
self.length = length;
self.width = width;
def detail(self):
print(self.length, self.width)
def showArea(self):
area = self.length * self.width
return area
def showCir(self):
cir = (self.length + self.width) * 2
return cir
#執行個體化
rect1 = Rect(4,5)
#調用函數
rect1.detail()
area = rect1.showArea()
cir = rect1.showCir()
print('面積:', area)
print('周長:', cir)
輸出結果面積為20,周長為18。對于面向對象的封裝來說,其實就是使用構造方法将内容封裝到對象中,然後通過對象直接或者self間接擷取被封裝的内容。
==整體而言,面向對象是站在事物本身的角度去思考解決問題,如果上面采用面向過程定義函數的形式實作,當出現多個形狀時,你需要對每一種形狀都定義一種方法,而面向對象隻需把這些形狀的屬性和方法抽象出來,形成各種形狀,更符合真實情況。==
注意:為了更簡明快速的讓讀者學習Python資料爬取、資料分析、圖像識别等知識,本系列中的代碼很少采用定義類和對象的方式呈現,而是直接根據需要實作的功能或案例,直接編寫對應的代碼或函數實作。這是不規範和不合理的,在實際開發或更加規範的代碼中,更推薦大家采用面向對象的方法去程式設計,但本系列更想通過最簡潔的代碼告訴你原理,然後你再去提升和鍛煉自己的能力。
設計模式中的面向對象
再舉個例子:為了友善兒童學習程式設計,X公司開發了一套Racing Car模拟器,使用這個模拟器每個孩子都可以用一種簡單的語言來控制一輛賽車,例如right、left等。請設計一種簡單的語言,給出它的文法以及該語言的類圖。
這就是我們實際程式設計中聯系到生活的問題,它涉及到了設計模式相關知識,其中我采用的方法是“命名模式”實作的,用戶端是定義Children和Car,請求者是Children發出的Right、Left、Up、Down指令,接受者是Car執行Move(),抽象指令是上下左右的抽象接口,具體指令是Car的上下左右。我制作的類圖如下:
![]()
[Python從零到壹] 三.文法基礎之檔案操作、CSV檔案讀寫及面向對象一.檔案操作二.CSV檔案操作三.面向對象基礎四.總結 在這個例子中,我們使用了面向對象的思想,站在事物本身的角度去思考解決問題,而不是面向過程定義函數的形式實作。如果又出現一個空陸兩地車,它不僅能上下左右移動,還能飛行,傳統的方法還需要再寫四個上下左右移動的方法,而面向對象直接繼承Car,補充一個飛行新方法即可(不含方向),這就是面向對象的好處。
同樣,通過這個例子我不是想證明所采用的指令模式或畫的類圖是否正确,我想闡述的是我們學習面向對象知識主要是用來解決實際生活中的問題,讓它更加高效地解決問題和優化代碼。同時,面向對象思想要适應需求的變化,解決使用者的實際需求,在設計時就要盡量考慮到變化,會涉及到抽象、封裝變化(重點)、設計模式等知識。
無論如何,作者都希望這篇文章能給您普及一些Python知識,更希望您能跟着我一起寫代碼,一起進步。如果文章能給您的研究或項目提供一些微不足道的思路和幫助,就更欣慰了。作者最大的期望就是文章中的一些故事、話語、代碼或案例對您有所幫助,緻那些努力奮鬥的人。
阿裡雲前文賞析:
- [[Python從零到壹] 一.為什麼我們要學Python及基礎文法詳解]( https://developer.aliyun.com/article/787835)
- [[Python從零到壹] 二.文法基礎之條件語句、循環語句和函數]( https://developer.aliyun.com/article/826095)
- [Python從零到壹] 三.文法基礎之檔案操作、CSV檔案讀寫及面向對象
**遺憾,讓我們懂得完美。
逝去,讓我們不斷前行。
她夜色中的身姿是那麼的美。**
原文位址:
https://blog.csdn.net/Eastmount/article/details/108737755(By:娜璋之家 Eastmount 2021-12-07 夜于武漢)
參考文獻如下: