Python程序設計基礎教程(微課版) 課件 代崴 第6章 - Python文件操作;第7章 - Python面向對象編程_第1頁
Python程序設計基礎教程(微課版) 課件 代崴 第6章 - Python文件操作;第7章 - Python面向對象編程_第2頁
Python程序設計基礎教程(微課版) 課件 代崴 第6章 - Python文件操作;第7章 - Python面向對象編程_第3頁
Python程序設計基礎教程(微課版) 課件 代崴 第6章 - Python文件操作;第7章 - Python面向對象編程_第4頁
Python程序設計基礎教程(微課版) 課件 代崴 第6章 - Python文件操作;第7章 - Python面向對象編程_第5頁
已閱讀5頁,還剩86頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Python程序設計第6章Python文件操作學習目標了解文本/二進制文件識記文件打開模式掌握文件和目錄基本操作知識目標能夠操作文本文件和CSV文件能夠完成基本目錄操作能力目標數據完整性的重視良好組織結構對提高效率和減少錯誤的影響情感態度與價值觀文件概述01020403文本文件操作CSV文件操作目錄操作目

錄文件概述01020403文本文件操作CSV文件操作目錄操作目

錄文件分類文件操作函數文件:計算機系統中用于存儲信息的一種機制,允許將數據永久保存在磁盤或其他外存儲器上文本文件二進制文件6.1文件概述120文本文件:保存字符編碼的文件ASCIIUNICODEUTF-8GBK*.txt、*.html/*.htm、*.json、*.log、*.ini、源代碼文件(*.py、*.cpp、*.java)6.1.1文件分類120二進制文件:保存數據在內存中的字節序列序列化:將內存中的數據對象以字節序列寫入文件的過程反序列化:從文件中讀取字節序列再轉換成內存數據對象的過程壓縮文件(*.zip、*.7z)可執行文件(*.exe、*.dll、*.so)圖像文件(*.bmp、*.png、*.jpg)音視頻文件(*.mp3、*.mp4、*.avi)專有文件(*.dwg、*.psd、*.trec)6.1.1文件分類121內置函數處理文本/二進制文件open()read()、write()、……close()標準庫:csv、configparser、zipfile、pickle、sqlite3第三方庫:openpyxl、python-docx、OpenCV、librosa、Pillow6.1.2文件操作函數121文件概述01020403文本文件操作CSV文件操作目錄操作目

錄文本文件操作020403CSV文件操作目錄操作目

錄文件概述01打開文本文件讀/寫文本文件關閉文本文件Python使用“文件對象”與文本文件交互open()打開文件并獲取一個文件對象調用文件對象的方法讀寫內容close()關閉文件6.2文本文件操作121open():打開文本文件并返回一個文件對象,以便進行后續的操作file:要打開的文件路徑字符串,可以是絕對路徑,也可以是相對路徑(相對于當前正在運行的*.py文件)mode:可選,指定文件打開模式的字符串6.2.1打開文件121變量=open(file[,optional_params])f1=open('demo.txt')f2=open('E:/points.dat','rb')6.2.1打開文件122字符串說明讀寫模式'r'僅讀取(默認),從文件頭開始讀取,如果文件不存在則報錯'w'僅寫入,如果文件不存在則創建新的空文件,如果存在則清空文件內容'x'排它性創建,如果文件已存在則報錯'a'追加模式,如果文件不存在則創建新的空文件,如果存在則在末尾追加內容'+'讀寫模式,可同時讀取和寫入,與r、w、x、a模式組合使用文件模式't'文本模式(默認),以文本格式打開文件'b'二進制模式,以二進制格式打開文件readlines([hint])讀取文件的每一行,返回一個包含讀取行的列表hint:可選,控制讀取的行數,不指定則讀取全部行6.2.2讀取文件122f=open('names.txt')lines=f.readlines()#lines是一個列表forlinlines:#l是一個字符串print(l.strip('\n'))示例6-2readline([size])讀取文件下一行中的size個字符并返回,未指定size默認讀取整行適合文件較大的情況,循環調用處理多行數據6.2.2讀取文件122f=open('names.txt')line=f.readline()#line是一個字符串,包含一行的內容whileline!='':print(line)line=f.readline()示例6-3全文按行處理時,可直接遍歷文件對象,效果和循環調用readline()一樣6.2.2讀取文件123f=open('names.txt')forlinf:#l是一個字符串,包含一行的內容print(l)示例6-4read([size])從文件中讀取size個字符,以一個字符串的形式返回未指定size默認讀取所有內容6.2.2讀取文件123f=open('names.txt','r')contents=f.read()#contents是一個字符串print(contents)示例6-4writelines(string_list)接收一個所有元素均為字符串的列表對象作為參數,依次將每個字符串寫入文件該方法不會自動在每個字符串后添加換行符6.2.3寫入文件123f=open('writelines_demo.txt','w')names=['Danie','Kitty','Branda']f.writelines(names)示例6-7close():關閉文件確保所有的數據都被正確地寫入到磁盤釋放系統資源6.2.4關閉文件124f=open('writelines_demo.txt','w')names=['Danie','Kitty','Branda']f.writelines(names)f.close()示例6-8with子句:確保文件在代碼塊執行完畢后自動關閉6.2.4關閉文件124withopen('writelines_demo.txt','w')asf:

names=['Danie','Kitty','Branda']

f.writelines(names)示例6-9文件概述01020403文本文件操作CSV文件操作目錄操作目

錄CSV文件操作0304目錄操作目

錄文件概述0102文本文件操作csv模塊讀/寫CSV文件CSV文件:CommaSeparatedValues,純文本文件,用于存儲表格數據可以包含任意數量的記錄一般情況下一行一條記錄,不同字段用逗號分隔可與excel文件互相轉換,也可在Excel軟件中編輯6.3CSV文件操作131內置csv模塊,可直接導入讀寫CSV文件之前需要通過open()獲取文件對象6.3.1導入模塊131importcsvcsv.reader():創建一個csv閱讀器對象,該對象是可迭代對象,通過遍歷該對象處理文件的每一行6.3.2讀取文件131importcsvwithopen('csv_read_demo.csv')asf:reader=csv.reader(f)next(reader)#跳過標題行forrowinreader:sex='女'ifrow[2]=='F'else'男'print(f'{row[0]},{sex},學號是{row[1]}')示例6-14csv.writer():創建一個csv寫入器對象,通過該對象的writerow()/writerows()寫入內容6.3.3寫入文件132importcsvtitle=['姓名','職業','年齡']rows=[['張三','飛行員',32],['李四','工程師',28],['錢五','插畫師',26]]withopen('write_csv_demo.csv','w',newline='')asf:writer=csv.writer(f)writer.writerow(title)writer.writerows(rows)示例6-15文件概述01020403文本文件操作CSV文件操作目錄操作目

錄目錄操作04目

錄文件概述0102文本文件操作03CSV文件操作移動/復制/刪除文件創建/刪除/遍歷目錄文件路徑操作目錄是組織和管理文件的關鍵組件shutil模塊os模塊6.4目錄操作136shutil模塊move():移動文件,移動后原位置的文件不存在copy():拷貝文件,復制后不會更改原文件若目標位置已經存在同名文件,該文件將被覆蓋6.4.1文件移動和復制136importshutilsrc1='src_files/230114.log'#原文件路徑dst1='dst_files/230114.log'#目標文件路徑shutil.move(src1,dst1)#移動文件src2='src_files/230115.log'#原文件路徑dst2='dst_files/230115.log'#目標文件路徑shutil.copy(src2,dst2)#復制文件示例6-16os模塊remove():刪除文件,操作不可逆6.4.2文件刪除136importosfile_path='src_files/230116.log'os.remove(file_path)示例6-17os模塊mkdir():創建目錄rmdir():刪除目錄6.4.3目錄創建和刪除136importosdir_path='test_dir1'os.mkdir(dir_path)os.rmdir(dir_path)示例6-18os.walk():遞歸遍歷指定目錄每次返回一個三元組:(dirpath,dirnames,filenames)dirpath:當前正在遍歷的目錄路徑dirnames:該目錄下的子目錄列表filenames:該目錄下的非目錄文件列表6.4.4目錄遍歷136importosforroot,dirs,filesinos.walk('E:/src/'):forfileinfiles:print(os.path.join(root,file))示例6-19os.listdir():返回指定目錄下所有文件和子目錄的列表,不遞歸遍歷子目錄6.4.4目錄遍歷137importosfiles=os.listdir('../chapter06')forfileinfiles:print(file)示例6-20os.path.exists():檢查指定文件或目錄是否存在,如果存在則返回True,否則返回False6.4.5文件路徑操作137importosimportshutilsrc='src_files/230115.log'#原文件路徑dst='dst_files/230115.log'#目標文件路徑ifos.path.exists(dst):next_step=input(f'{dst}已存在,仍要復制嗎?(Y/n):')ifnext_step=='Y':shutil.copy(src,dst)print('拷貝完成!')else:print('拷貝停止!')示例6-21os.path.join():將多個路徑拼接成一個完整的文件路徑字符串6.4.5文件路徑操作137importosroot=r'E:\src'sub_dir='chapter06'file_name='demo.txt'full_path=os.path.join(root,sub_dir,file_name)print(full_path)#打印:E:\src\chapter06\demo.txt示例6-22os.path.abspath():返回指定文件的絕對路徑,如果給定的路徑已經是絕對路徑,則返回該路徑;否則將其轉換為絕對路徑6.4.5文件路徑操作138importosrelative_path='6-18.py'absolute_path=os.path.abspath(relative_path)#打印結果:E:\src\chapter06\6-18.pyprint(absolute_path)示例6-23解析文件路徑os.path.dirname():返回指定文件的目錄部分,不含文件名部分os.path.basename():返回指定路徑的文件名部分,不含目錄部分os.path.splitext():將文件路徑按最后一個“.”分割,返回一個包含文件名和擴展名的元組6.4.5文件路徑操作1386.4.5文件路徑操作138importosfull_path=r'E:\src\demo.py'dir_path=os.path.dirname(full_path)

#目錄部分base_name=os.path.basename(full_path)

#完整文件名#文件名、擴展名file_name,ext=os.path.splitext(base_name) print(dir_path) #打印結果:E:\srcprint(base_name) #打印結果:demo.pyprint(file_name) #打印結果:demoprint(ext) #打印結果:.py示例6-24本章結束Python程序設計第7章Python面向對象編程學習目標識記類的語法理解面向對象三大特征掌握面向對象三大特征的使用方法知識目標能夠正確編寫Python類能夠使用Python類解決實際問題能力目標數據隱私的尊重和保護創新精神和可持續發展意識多樣性思維和包容性情感態度與價值觀Python類與對象01020403封裝繼承多態目

錄Python類與對象01020403封裝繼承多態目

錄面向對象基本概念類的定義對象的使用面向過程程序設計以算法為中心問題->一系列步驟制作蛋糕:準備材料->攪拌面糊->烤制蛋糕胚->涂抹奶油->裱花裝飾mix_batter(flour)bake_cake(power,minites)spread_cream(color)decoration(cream,ftruits,chocolate)面向對象程序設計7.1.1面向過程與面向對象程序設計1457.1.2類與對象146現實含義面向對象程序設計類和對象類一群具有相似特征或行為的個體的統稱模板或者藍圖規定了一組屬性(變量)和一組方法(函數)屬于自定義的數據類型人類-張三寵物類-薩摩耶肉包微波爐類-貨架上待售的某臺微波爐對象某個類的一個具體實例,具有該類的屬性和行為根據模板將屬性值具體化之后,得到的一個類的實例個體擁有具體的屬性值能使用類定義的方法封裝:將數據和操作捆綁在一起,形成一個類定義每個類的職責隱藏了內部實現細節提高代碼可讀性和可維護性增加了數據的安全性和可靠性。繼承:從已有的類派生出新類的過程避免重復編寫相同的代碼方便系統擴展多態:提高了代碼的靈活性和擴展性7.1.3面向對象三大特征1467.2類的定義與對象使用1477.2.1關鍵字class147class:定義類定義一個空類class類名:#類體classCircle:pass示例7-17.2.2類屬性和類方法147類屬性:與類本身關聯的屬性所有對象能夠共享的屬性對于具體的實例來說意義不大類屬性位于類的頂部,定義在類的任何方法之外使用類屬性class類名:類屬性1=值1類屬性2=值2類名.類屬性名7.2.2類屬性和類方法148類屬性的定義和使用classCircle:pi=3.14159default_line_color='黑色'default_fill_color='白色'print(Circle.pi)Circle.default_line_color='紅色'示例7-27.2.2類屬性和類方法148類方法:封裝與類屬性有關、與實例無關的功能不能直接訪問實例屬性和實例方法調用類方法class類名:@classmethoddef類方法名(cls,參數列表)#函數體類名.類方法(除cls之外的參數值)使用裝飾器@classmethodcls:代表該方法所屬的類,在類方法內部將cls當類名使用7.2.2類屬性和類方法148類方法的定義和使用classCircle:@classmethoddefset_default_color(cls,line,fill):cls.default_line_color=linecls.default_fill_color=fillCircle.set_default_color('深藍色','淺藍色')示例7-37.2.3實例屬性和實例方法149實例屬性:類的對象各自持有的屬性標識對象本身的特征值與對象自身密切關聯,不應與其他對象共享舉例每個人的身份證號每臺洗衣機的品牌和型號每本書的書名和作者實例屬性通常寫在類的__init__()方法中7.2.3實例屬性和實例方法149__init__()方法調用時機:創建類的新對象時作用:初始化新對象命名:__方法名__特定場景下自動調用開發者考慮具體實現魔術方法class類名:def__init__(self,參數1,參數2,...,參數N)self.實例屬性1=參數1self.實例屬性2=參數2...self.實例屬性N=參數Nself:代表即將被創建出來的新對象self.實例屬性名=值7.2.3實例屬性和實例方法149實例屬性的定義classCircle:def__init__(self,r,line_color=default_line_color,fill_color=default_fill_color):self.r=rself.line_color=line_colorself.fill_color=fill_color示例7-47.2.3實例屬性和實例方法149實例的創建變量名=類名(__init__()方法中除了self之外的參數)classCircle:def__init__(self,r,

ine_color=default_line_color,fill_color=default_fill_color):

self.r=rself.line_color=line_colorself.fill_color=fill_colorc1=Circle(1.0)c2=Circle(2.0,'紅色','黃色')示例7-47.2.3實例屬性和實例方法150實例屬性的使用對象.實例屬性名classCircle:def__init__(self,r,

line_color=default_line_color,fill_color=default_fill_color):self.r=rself.line_color=line_colorself.fill_color=fill_colorc1=Circle(1.0)c2=Circle(2.0,'紅色','黃色')print(f'半徑{c1.r},線條{c1.line_color},填充{c1.fill_color}')示例7-47.2.3實例屬性和實例方法150實例方法:與具體的對象關聯的方法需要對象執行的行為調用實例方法class類名:def實例方法名(self,參數1,參數2,...,參數N)#代碼塊對象.實例方法(除self之外的其他參數)self:代表正在調用這個實例方法的對象7.2.3實例屬性和實例方法150實例方法的定義與調用classCircle:def__init__(self,r,

line_color=default_line_color,fill_color=default_fill_color):self.r=rself.line_color=line_colorself.fill_color=fill_color

defdraw(self):print(f'繪制圓:半徑{self.r},線條{self.line_color},填充{self.fill_color}')c1=Circle(2.0,'紅色','黃色')c1.draw()示例7-57.2.4靜態方法150靜態方法邏輯上功能和類相關放在類中更合適通過“類名.靜態方法()”調用class類名:@staticmethoddef方法名(參數列表)#函數體使用裝飾器@staticmethod7.2.4靜態方法151靜態方法的定義和調用classCircle:pi=3.14159@staticmethoddefcalc_area(r):returnr**2*Circle.piprint(Circle.calc_area(2.0))示例7-6Python類與對象01020403封裝繼承多態目

錄封裝020403繼承多態目

錄Python類與對象01Python實現封裝@property7.3封裝151封裝:信息隱藏只對外提供必要的屬性和方法,提高代碼安全性外部不關心對象內部的實現細節,簡化編程過程訪問控制私有保護公有可以公開:名字受保護的:財產絕對不能公開:秘密7.3.1Python實現封裝151Python沒有明確的訪問控制符保護屬性或方法:單下劃線“_”開始,規范上約定不能直接使用(用了也不會報錯)私有屬性或方法:雙下劃線“__”開始,語法上不能直接使用(用了會報錯)classDemo1:def__init__(self):self.__private_data=0

def__private_method(self):print('一個前置雙下劃線命名的私有方法')示例7-77.3.1Python實現封裝151classCircle:definfo(self):print(self.__private_data)self.__private_method()d1=Demo1()print(d1.__private_data)#報錯:AttributeErrord1.__private_method()#報錯:AttributeError

print(d1._Demo1__private_data)d1._Demo1__private_method()示例7-77.3.1Python實現封裝152前置單下劃線命名保護的屬性和方法classDemo2:def__init__(self):self._protected_data=0def_protected_method(self):print('一個前置單下劃線命名的保護方法')definfo(self):print(self._protected_data)self._protected_method()d2=Demo2()print(d2._protected_data)d2._protected_method()示例7-87.3.2@property152通過實例方法get_r()和set_r()讀寫半徑classCircle:def__init__(self):self.__r=Nonedefget_r(self):returnself.__rdefset_r(self,r):if(isinstance(r,int)orisinstance(r,float))andr>0:self.__r=relse:print('r必須是大于0的整數或浮點數.')示例7-97.3.2@property152通過實例方法get_r()和set_r()讀寫半徑@property:定義對象屬性訪問器將一個實例方法偽裝成實例屬性簡潔代碼c1=Circle()c1.set_r(2.0)print(c1.get_r())#打印結果:2.0示例7-97.3.2@property153@property定義只讀屬性fromdatetimeimportdateclassPerson:def__init__(self,name,born):=nameself.born=born示例7-107.3.2@property153@property定義只讀屬性

@propertydefage(self):today=date.today()birthday=self.born.replace(year=today.year)ifbirthday>today:returntoday.year-self.born.year-1else:returntoday.year-self.born.yearp1=Person('',date(1990,5,15))print(p1.age)#打印結果:33示例7-107.3.2@property153@property定義讀/寫屬性classCircle:def__init__(self):self.__r=None@propertydefr(self):returnself.__r示例7-117.3.2@property153@property定義讀/寫屬性

@r.setterdefr(self,r):if(isinstance(r,int)orisinstance(r,float))andr>0:self.__r=relse:print('r必須是大于0的整數或浮點數.')c1=Circle()c1.r=2.0print(c1.r)#打印結果:2.0示例7-11Python類與對象01020403封裝繼承多態目

錄繼承0304多態目

錄Python類與對象0102封裝代碼復用擴展新特性7.4.1代碼復用161繼承:從已有的類派生新的子類,子類完全繼承父類的公有屬性和公有方法實現代碼復用,減少類之間代碼冗余子類添加新屬性/方法,靈活擴展生命值攻擊值派生成長等級escape()派生攻擊傾向Spirit類Pet類Monster類7.4.1代碼復用繼承語法class子類名(父類名):#子類實現7.4.1代碼復用161Spirit類派生子類Pet和MonsterclassSpirit:def__init__(self,life=100,aggro=False):self.life=lifeself.current_life=lifeself.aggro=aggrodefis_live(self):returnFalseifself.current_life<=0elseTruedefis_aggro(self):returnself.aggro示例7-127.4.1代碼復用161Spirit類派生子類Pet和MonsterclassPet(Spirit):passclassMonster(Spirit):passp1=Pet(100,True)#調用父類的__init__()m1=Monster(400,False)#調用父類的__init__()print(p1.life,p1.current_life,p1.aggro)print(m1.life,m1.current_life,m1.aggro)示例7-127.4.2擴展新特性161擴展新特性class子類名(父類名)子類類屬性=值def__init__(self,參數列表):

#初始化繼承的實例屬性super().__init__(參數列表)

self.子類實例屬性=值super():內置函數,用于調用父類的方法,此處調用確保父類中的初始化代碼正確執行子類__init__()方法的參數列表常常要包含父類初始化所需的參數7.4.2擴展新特性162子類Monster添加新方法classMonster(Spirit):def__init__(self,life=100,aggro=False,exp=200):super().__init__(life,aggro)self.exp=expdefescape(self):p=random.randint(1,100)ifp<=40:print('逃跑成功!')self.current_life=self.lifeelse:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論