[Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象
歡迎大家來到“Python從零到壹”,在這里我將分享約200篇Python系列文章,帶大家一起去學習和玩耍,看看Python這個有趣的世界。所有文章都將結合案例、代碼和作者的經驗講解,真心想把自己近十年的編程經驗分享給大家,希望對您有所幫助,文章中不足之處也請海涵。
Python系列整體框架包括基礎語法10篇、網絡爬蟲30篇、可視化分析10篇、機器學習20篇、大數據分析20篇、圖像識別30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的關注、點贊和轉發就是對秀璋最大的支持,知識無價人有情,希望我們都能在人生路上開心快樂、共同成長。
本文參考了作者CSDN的文章,鏈接如下:
- https://blog.csdn.net/Eastmount
- https://github.com/eastmountyxz/Python-zero2one
同時,作者新開的“娜璋AI安全之家”將專注于Python和安全技術,主要分享Web滲透、系統安全、人工智能、大數據分析、圖像識別、惡意代碼檢測、CVE復現、威脅情報分析等文章。雖然作者是一名技術小白,但會保證每一篇文章都會很用心地撰寫,希望這些基礎性文章對你有所幫助,在Python和安全路上與大家一起進步。
文章目錄
- 一.文件操作
- 1.打開文件
- 2.讀寫文件
- 3.關閉文件
- 4.循環遍歷文件
- 二.CSV文件操作
- 1.CSV文件寫
- 2.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()針對列表操作,接收一個字符串列表參數,并寫入文件
針對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文件和輸出值。
二.CSV文件操作
我們在使用Python進行網絡爬蟲或數據分析時,通常會遇到CSV文件,類似于Excel表格。接著我們補充SCV文件讀寫的基礎知識。
CSV(Comma-Separated Values)是常用的存儲文件,逗號分隔符,值與值之間用分號分隔。Python中導入CSV擴展包即可使用,包括寫入文件和讀取文件。
1.CSV文件寫
基本流程如下:
- 導入CSV模塊
- 創建一個CSV文件對象
- 寫入CSV文件
- 關閉文件
輸出結果如下圖所示:
注意,此時會出現多余空行,我們需要進行簡單的處理,加入參數“newline=‘’”解決。
- c = open(“test-01.csv”, “w”, encoding=“utf8”, newline=’’)
2.CSV文件讀
基本流程如下:
- 導入CSV模塊
- 創建一個CSV文件對象
- 讀取CSV文件
- 關閉文件
輸出結果如下圖所示:
在文件操作中編碼問題是最讓人頭疼的,尤其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.widthreturn areadef showCir(self):cir = (self.length + self.width) * 2return 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的上下左右。我制作的類圖如下:
在這個例子中,我們使用了面向對象的思想,站在事物本身的角度去思考解決問題,而不是面向過程定義函數的形式實現。如果又出現一個空陸兩地車,它不僅能上下左右移動,還能飛行,傳統的方法還需要再寫四個上下左右移動的方法,而面向對象直接繼承Car,補充一個飛行新方法即可(不含方向),這就是面向對象的好處。
同樣,通過這個例子我不是想證明所采用的命令模式或畫的類圖是否正確,我想闡述的是我們學習面向對象知識主要是用來解決實際生活中的問題,讓它更加高效地解決問題和優化代碼。同時,面向對象思想要適應需求的變化,解決用戶的實際需求,在設計時就要盡量考慮到變化,會涉及到抽象、封裝變化(重點)、設計模式等知識。
四.總結
無論如何,作者都希望這篇文章能給您普及一些Python知識,更希望您能跟著我一起寫代碼,一起進步。如果文章能給您的研究或項目提供一些微不足道的思路和幫助,就更欣慰了。作者最大的期望就是文章中的一些故事、話語、代碼或案例對您有所幫助,致那些努力奮斗的人。
前文賞析:
- [Python從零到壹] 一.為什么我們要學Python及基礎語法詳解
- [Python從零到壹] 二.語法基礎之條件語句、循環語句和函數
- [Python從零到壹] 三.語法基礎之文件操作、CSV文件讀寫及面向對象
最后,真誠地感謝您關注“娜璋之家”公眾號,感謝CSDN這么多年的陪伴,會一直堅持分享,希望我的文章能陪伴你成長,也希望在技術路上不斷前行。文章如果對你有幫助、有感悟,就是對我最好的回報,且看且珍惜!2020年8月18日建立的公眾號,再次感謝您的關注,也請幫忙宣傳下“娜璋之家”,哈哈~初來乍到,還請多多指教。
遺憾,讓我們懂得完美。
逝去,讓我們不斷前行。
她夜色中的身姿是那么的美。
(By:娜璋之家 Eastmount 2020-09-22 夜于武漢 https://blog.csdn.net/Eastmount )
參考文獻如下:
- 作者書籍《Python網絡數據爬取及分析從入門到精通》
- 作者博客:https://blog.csdn.net/Eastmount
- https://www.runoob.com/python/file-methods.html
- https://www.cnblogs.com/qican/p/11122206.html
- https://blog.csdn.net/Eastmount/article/details/78389201
總結
以上是生活随笔為你收集整理的[Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [网络安全自学篇] 九十五.利用XAMP
- 下一篇: [Python从零到壹] 五.网络爬虫之