日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

[Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象

發(fā)布時間:2024/6/1 python 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

歡迎大家來到“Python從零到壹”,在這里我將分享約200篇Python系列文章,帶大家一起去學(xué)習(xí)和玩耍,看看Python這個有趣的世界。所有文章都將結(jié)合案例、代碼和作者的經(jīng)驗(yàn)講解,真心想把自己近十年的編程經(jīng)驗(yàn)分享給大家,希望對您有所幫助,文章中不足之處也請海涵。

Python系列整體框架包括基礎(chǔ)語法10篇、網(wǎng)絡(luò)爬蟲30篇、可視化分析10篇、機(jī)器學(xué)習(xí)20篇、大數(shù)據(jù)分析20篇、圖像識別30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的關(guān)注、點(diǎn)贊和轉(zhuǎn)發(fā)就是對秀璋最大的支持,知識無價人有情,希望我們都能在人生路上開心快樂、共同成長。

本文參考了作者CSDN的文章,鏈接如下:

  • https://blog.csdn.net/Eastmount
  • https://github.com/eastmountyxz/Python-zero2one

同時,作者新開的“娜璋AI安全之家”將專注于Python和安全技術(shù),主要分享Web滲透、系統(tǒng)安全、人工智能、大數(shù)據(jù)分析、圖像識別、惡意代碼檢測、CVE復(fù)現(xiàn)、威脅情報分析等文章。雖然作者是一名技術(shù)小白,但會保證每一篇文章都會很用心地撰寫,希望這些基礎(chǔ)性文章對你有所幫助,在Python和安全路上與大家一起進(jìn)步。

文章目錄

  • 一.文件操作
    • 1.打開文件
    • 2.讀寫文件
    • 3.關(guān)閉文件
    • 4.循環(huán)遍歷文件
  • 二.CSV文件操作
    • 1.CSV文件寫
    • 2.CSV文件讀
  • 三.面向?qū)ο蠡A(chǔ)
  • 四.總結(jié)



一.文件操作

文件是指存儲在外部介質(zhì)上數(shù)據(jù)的集合,文本文件編碼方式包括ASCII格式、Unicode碼、UTF-8碼、GBK編碼等。文件的操作流程為“打開文件-讀寫文件-關(guān)閉文件”三部曲。

1.打開文件

打開文件調(diào)用open()函數(shù)實(shí)現(xiàn),其返回結(jié)果為一個文件對象,函數(shù)原型如下:

<variable> = open(<name>, <mode>)-<name>表示打開文件名稱-<mode>表示文件打開模式

其中mode常見參數(shù)包括:

  • r: 只讀,文件指針將會放在文件的開頭
  • w:只寫,如果文件已存在則打開文件,并從開頭開始編輯,即原有內(nèi)容會被刪除;如果該文件不存在,創(chuàng)建新文件
  • a: 打開一個文件用于追加,如果該文件已存在,文件指針將會放在文件的結(jié)尾;如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入
  • rb: 只讀二進(jìn)制文件,一般用于非文本文件如圖片等
  • wb: 只寫二進(jìn)制文件,一般用于非文本文件如圖片等
  • ab: 以二進(jìn)制格式打開一個文件用于追加
  • w+: 打開一個文件用于讀寫

open()函數(shù)的完整語法如下:

  • open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

舉一個簡單的例子:

infile = open("test.txt","r")

注意:使用open()方法一定要保證關(guān)閉文件對象,即調(diào)用close()方法。


2.讀寫文件

(1) 讀文件
常用文件讀取方法包括:

  • read()返回值為包含整個文本內(nèi)容的一個字符串
  • readline()返回值為文件內(nèi)容的下一行內(nèi)容的字符串
  • readlines()返回值為整個文件內(nèi)容的列表,列表中每項為一行字符串

示例如下:

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)

輸出結(jié)果如下圖所示:



(2) 寫文件
從計算機(jī)內(nèi)存向文件寫入數(shù)據(jù),方法包括:

  • write()把含有文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)集的字符串寫入文件中
  • writelines()針對列表操作,接收一個字符串列表參數(shù),并寫入文件
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文件完成新建及寫入操作,同時調(diào)用write()和writelines()不同方法寫入數(shù)據(jù)。


3.關(guān)閉文件

文件讀寫結(jié)束后,一定要記住使用close()方法關(guān)閉文件。如忘記使用該關(guān)閉語句,則當(dāng)程序突然崩潰時,該程序不會繼續(xù)執(zhí)行寫入操作,甚至當(dāng)程序正常執(zhí)行完文件寫操作后,由于沒有關(guān)閉文件操作,該文件可能會沒有包含已寫入的數(shù)據(jù)。為安全起見,在使用完文件后需要關(guān)閉文件,建議讀者使用try-except-finally異常捕獲語句,并在finally子句中關(guān)閉文件。

try:#文件操作 except :#異常處理 finally:file.close()

其他方法包括:

  • file.flush():刷新文件內(nèi)部緩沖
  • file.next():返回文件下一行
  • file.seek(offset[, whence]):設(shè)置文件當(dāng)前位置
  • file.tell():返回文件當(dāng)前位置
  • file.truncate([size]):截取文件,截取的字節(jié)通過size指定

4.循環(huán)遍歷文件

在數(shù)據(jù)爬取或數(shù)據(jù)分析中,常常會涉及到文件遍歷,通常采用for循環(huán)遍歷文件內(nèi)容,一方面可以調(diào)用read()函數(shù)讀取文件循環(huán)輸出,另一方面也可以調(diào)用readlines()函數(shù)實(shí)現(xiàn)。其兩種方法的對比代碼如下所示:

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())

輸出結(jié)果《靜夜思》如下圖所示,包含TXT文件和輸出值。



二.CSV文件操作

我們在使用Python進(jìn)行網(wǎng)絡(luò)爬蟲或數(shù)據(jù)分析時,通常會遇到CSV文件,類似于Excel表格。接著我們補(bǔ)充SCV文件讀寫的基礎(chǔ)知識。

CSV(Comma-Separated Values)是常用的存儲文件,逗號分隔符,值與值之間用分號分隔。Python中導(dǎo)入CSV擴(kuò)展包即可使用,包括寫入文件和讀取文件。

1.CSV文件寫

基本流程如下:

  • 導(dǎo)入CSV模塊
  • 創(chuàng)建一個CSV文件對象
  • 寫入CSV文件
  • 關(guān)閉文件
# -*- 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()

輸出結(jié)果如下圖所示:

注意,此時會出現(xiàn)多余空行,我們需要進(jìn)行簡單的處理,加入?yún)?shù)“newline=‘’”解決。

  • c = open(“test-01.csv”, “w”, encoding=“utf8”, newline=’’)


2.CSV文件讀

基本流程如下:

  • 導(dǎo)入CSV模塊
  • 創(chuàng)建一個CSV文件對象
  • 讀取CSV文件
  • 關(guān)閉文件
# -*- 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()

輸出結(jié)果如下圖所示:

在文件操作中編碼問題是最讓人頭疼的,尤其Python2的時候。但只需要環(huán)境編碼一致,注意相關(guān)轉(zhuǎn)換也能有效解決,而Python3文件讀寫操作寫清楚encoding編碼方式就能正常顯示。如果是數(shù)據(jù)庫、網(wǎng)頁、后臺語言,三者編碼方式需要一致,比如utf8或gbk等,具體問題具體解決吧!后續(xù)作者會結(jié)合爬蟲講解CSV文件的操作。



三.面向?qū)ο蠡A(chǔ)

傳統(tǒng)的編程方式是面向過程的,根據(jù)業(yè)務(wù)邏輯從上到下執(zhí)行,而面向?qū)ο缶幊淌橇硪环N編程方式,此種編程方式需要使用“類”和“對象”來實(shí)現(xiàn),將函數(shù)進(jìn)行封裝,更接近真實(shí)生活的一種編程方式。

面向?qū)ο笫菍⒖陀^事物看做屬性和行為的對象,通過抽象同一類對象的共同屬性和行為,形成類,通過對類的繼承和多態(tài)實(shí)現(xiàn)代碼重用等。對象(Object)是類(Class)的一個實(shí)例,如果將對象比作房子,那么類就是房子的設(shè)計圖,并在類中定義了屬性和方法。

面向?qū)ο蟮娜齻€基本特征為:

  • 封裝:把客觀事物封裝成抽象的類,類中數(shù)據(jù)和方法讓類或?qū)ο筮M(jìn)行操作。
  • 繼承:子類繼承父類后,它可以使用父類的所有功能,無需重新編寫原有類,并且可以對功能進(jìn)行擴(kuò)展。
  • 多態(tài):類中定義的屬性或行為,被特殊類繼承后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)不同的行為,各個類能表現(xiàn)不同的語義,實(shí)現(xiàn)的兩種方法為覆蓋和重載。

在Python中,類就是一個模板,模板里可以包含多個函數(shù),函數(shù)里實(shí)現(xiàn)一些功能;對象則是根據(jù)模板創(chuàng)建的實(shí)例,通過實(shí)例對象可以執(zhí)行類中的函數(shù)。如下:

#創(chuàng)建類 class 類名:#創(chuàng)建類中的函數(shù),self特殊參數(shù),不能省略def 函數(shù)名(self):#函數(shù)實(shí)現(xiàn)#根據(jù)類創(chuàng)建對象obj obj = 類名()

假設(shè)需要編寫一個計算長方形面積和周長的程序,其思想是定義兩個變量長和寬,然后再在類中定義計算面積和周長的方法,實(shí)例化使用。代碼如下:

#-*- 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 #實(shí)例化 rect1 = Rect(4,5) #調(diào)用函數(shù) rect1.detail() area = rect1.showArea() cir = rect1.showCir() print('面積:', area) print('周長:', cir)

輸出結(jié)果面積為20,周長為18。對于面向?qū)ο蟮姆庋b來說,其實(shí)就是使用構(gòu)造方法將內(nèi)容封裝到對象中,然后通過對象直接或者self間接獲取被封裝的內(nèi)容。

整體而言,面向?qū)ο笫钦驹谑挛锉旧淼慕嵌热ニ伎冀鉀Q問題,如果上面采用面向過程定義函數(shù)的形式實(shí)現(xiàn),當(dāng)出現(xiàn)多個形狀時,你需要對每一種形狀都定義一種方法,而面向?qū)ο笾恍璋堰@些形狀的屬性和方法抽象出來,形成各種形狀,更符合真實(shí)情況。

注意:為了更簡明快速的讓讀者學(xué)習(xí)Python數(shù)據(jù)爬取、數(shù)據(jù)分析、圖像識別等知識,本系列中的代碼很少采用定義類和對象的方式呈現(xiàn),而是直接根據(jù)需要實(shí)現(xiàn)的功能或案例,直接編寫對應(yīng)的代碼或函數(shù)實(shí)現(xiàn)。這是不規(guī)范和不合理的,在實(shí)際開發(fā)或更加規(guī)范的代碼中,更推薦大家采用面向?qū)ο蟮姆椒ㄈゾ幊?#xff0c;但本系列更想通過最簡潔的代碼告訴你原理,然后你再去提升和鍛煉自己的能力。


設(shè)計模式中的面向?qū)ο?/strong>
再舉個例子:為了方便兒童學(xué)習(xí)編程,X公司開發(fā)了一套Racing Car模擬器,使用這個模擬器每個孩子都可以用一種簡單的語言來控制一輛賽車,例如right、left等。請設(shè)計一種簡單的語言,給出它的語法以及該語言的類圖。

這就是我們實(shí)際編程中聯(lián)系到生活的問題,它涉及到了設(shè)計模式相關(guān)知識,其中我采用的方法是“命名模式”實(shí)現(xiàn)的,客戶端是定義Children和Car,請求者是Children發(fā)出的Right、Left、Up、Down命令,接受者是Car執(zhí)行Move(),抽象命令是上下左右的抽象接口,具體命令是Car的上下左右。我制作的類圖如下:


在這個例子中,我們使用了面向?qū)ο蟮乃枷?#xff0c;站在事物本身的角度去思考解決問題,而不是面向過程定義函數(shù)的形式實(shí)現(xiàn)。如果又出現(xiàn)一個空陸兩地車,它不僅能上下左右移動,還能飛行,傳統(tǒng)的方法還需要再寫四個上下左右移動的方法,而面向?qū)ο笾苯永^承Car,補(bǔ)充一個飛行新方法即可(不含方向),這就是面向?qū)ο蟮暮锰帯?br />
同樣,通過這個例子我不是想證明所采用的命令模式或畫的類圖是否正確,我想闡述的是我們學(xué)習(xí)面向?qū)ο笾R主要是用來解決實(shí)際生活中的問題,讓它更加高效地解決問題和優(yōu)化代碼。同時,面向?qū)ο笏枷胍m應(yīng)需求的變化,解決用戶的實(shí)際需求,在設(shè)計時就要盡量考慮到變化,會涉及到抽象、封裝變化(重點(diǎn))、設(shè)計模式等知識。



四.總結(jié)

無論如何,作者都希望這篇文章能給您普及一些Python知識,更希望您能跟著我一起寫代碼,一起進(jìn)步。如果文章能給您的研究或項目提供一些微不足道的思路和幫助,就更欣慰了。作者最大的期望就是文章中的一些故事、話語、代碼或案例對您有所幫助,致那些努力奮斗的人。

前文賞析:

  • [Python從零到壹] 一.為什么我們要學(xué)Python及基礎(chǔ)語法詳解
  • [Python從零到壹] 二.語法基礎(chǔ)之條件語句、循環(huán)語句和函數(shù)
  • [Python從零到壹] 三.語法基礎(chǔ)之文件操作、CSV文件讀寫及面向?qū)ο?/li>

最后,真誠地感謝您關(guān)注“娜璋之家”公眾號,感謝CSDN這么多年的陪伴,會一直堅持分享,希望我的文章能陪伴你成長,也希望在技術(shù)路上不斷前行。文章如果對你有幫助、有感悟,就是對我最好的回報,且看且珍惜!2020年8月18日建立的公眾號,再次感謝您的關(guān)注,也請幫忙宣傳下“娜璋之家”,哈哈~初來乍到,還請多多指教。

遺憾,讓我們懂得完美。
逝去,讓我們不斷前行。
她夜色中的身姿是那么的美。

(By:娜璋之家 Eastmount 2020-09-22 夜于武漢 https://blog.csdn.net/Eastmount )


參考文獻(xiàn)如下:

  • 作者書籍《Python網(wǎng)絡(luò)數(shù)據(jù)爬取及分析從入門到精通》
  • 作者博客: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

總結(jié)

以上是生活随笔為你收集整理的[Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。