Python程序設(shè)計(jì)基礎(chǔ) 課件 傅彬 項(xiàng)目7、8 目錄和文件-批量操作、錯誤和異常_第1頁
Python程序設(shè)計(jì)基礎(chǔ) 課件 傅彬 項(xiàng)目7、8 目錄和文件-批量操作、錯誤和異常_第2頁
Python程序設(shè)計(jì)基礎(chǔ) 課件 傅彬 項(xiàng)目7、8 目錄和文件-批量操作、錯誤和異常_第3頁
Python程序設(shè)計(jì)基礎(chǔ) 課件 傅彬 項(xiàng)目7、8 目錄和文件-批量操作、錯誤和異常_第4頁
Python程序設(shè)計(jì)基礎(chǔ) 課件 傅彬 項(xiàng)目7、8 目錄和文件-批量操作、錯誤和異常_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

程序設(shè)計(jì)基礎(chǔ)——文件和目錄簡單易學(xué)易讀易維護(hù)開源

可移植性

可擴(kuò)展性

豐富的庫

Python目錄CONTENTS項(xiàng)目描述01思路分析02文件操作03目錄操作04實(shí)現(xiàn)項(xiàng)目05項(xiàng)目描述01一、項(xiàng)目描述小明是某公司的計(jì)算機(jī)運(yùn)維部員工,他每天的工作內(nèi)容如下:1、檢查某目錄及子目錄下所有含有A內(nèi)容的.txt文件,復(fù)制到指定目錄下,并將在原文件名末尾加上“_B”,如原文件名為“abc.txt”,修改后的文件名為“abc_B.txt”。2、檢查某目錄及子目錄下所有文件是否被修改。3、刪除指定目錄及子目錄下的重復(fù)文件。請你幫助小明編寫相關(guān)的程序。思路分析02二、思路分析Python的輸入語句input()函數(shù)可以實(shí)現(xiàn)從鍵盤輸入數(shù)據(jù),輸出語句print()函數(shù)可以實(shí)現(xiàn)將數(shù)據(jù)輸出到屏幕上,但是當(dāng)每次運(yùn)行結(jié)束后,運(yùn)行結(jié)果就會被“清空”,再次運(yùn)行程序時需要重新輸入數(shù)據(jù)或重新輸出結(jié)果。程序運(yùn)行需要的數(shù)據(jù)不僅可以來源于鍵盤輸入,還可以來自文件,程序的運(yùn)行結(jié)果不僅可以輸出到屏幕上,還可以保存到文件中。獲取某目錄及子目錄下所有的.txt文件,如果文件不大,則直接打開文件,如果文件較大,則按行或指定字節(jié)讀取,判斷是否有含A的內(nèi)容,如果文件中含有A的內(nèi)容,將其復(fù)制到指定目錄中,新的文件的文件名在原文件名末尾加上“_B”。將目錄及子目錄中的文件進(jìn)行md5加密并寫入到文件中,由于文件被修改后其MD5值也會改變,所以在需要檢查時,只需要判斷MD5值是否改變,就可以用來判斷一個文件是否被修改過。遍歷某目錄及子目錄下,得到文件列表,使用列表中的每一個文件與列表中其他文件進(jìn)行比較,如果文件相同即可刪除重復(fù)文件。文件操作033、怎么才能學(xué)好Python安全編程?1.文件的打開在Python中,可以使用open()方法來打開文件,并返回文件對象,在對文件進(jìn)行處理過程都需要使用到這個函數(shù),如果該文件無法被打開,會拋出OSError。語法格式如下:open(文件名[,訪問模式])2、為什么要學(xué)習(xí)Python?三、文件操作序號訪問模式描述1r默認(rèn)只讀模式。打開文件,文件指針定位在開頭。2w可寫模式打開文件。如果文件存在則覆蓋,文件不存在則創(chuàng)建文件。3a追加模式打開文件。如果文件存在指針定位文件結(jié)尾,文件不存在則創(chuàng)建文件并寫入。4rb以二進(jìn)制格式只讀模式打開文件。文件指針定位在開頭。通常用于處理聲音、圖像等文件。5wb以二進(jìn)制格式可寫模式打開文件。如果文件存在則覆蓋,文件不存在則創(chuàng)建文件。通常用于處理聲音、圖像等文件。6ab以二進(jìn)制格式追加模式打開文件。如果文件存在指針定位文件結(jié)尾,文件不存在則創(chuàng)建文件并寫入。通常用于處理聲音、圖像等文件。7r+打開一個文件用于讀寫。文件指針將會放在文件的開頭8w+打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,則創(chuàng)建新文件9a+打開一個文件用于讀寫。如果該文件已存在,文件指針將會放在文件的結(jié)尾。文件打開時會是追加模式。如果該文件不存在,則創(chuàng)建新文件用于讀寫10rb+以二進(jìn)制格式打開一個文件用于讀寫。文件指針將會放在文件的開頭。一般用于非文本文件如圖片等。11wb+以二進(jìn)制格式打開一個文件用于讀寫。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內(nèi)容會被刪除。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。12ab+以二進(jìn)制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫。3、怎么才能學(xué)好Python安全編程?2.文件的關(guān)閉使用open()方法一定要保證關(guān)閉文件對象,即調(diào)用close()方法。凡是打開的文件,切記要使用close()方法將其關(guān)閉。雖然文件會在程序退出后自動關(guān)閉,但是考慮到數(shù)據(jù)的安全性,建議還是要養(yǎng)成該習(xí)慣,打開的文件在用完后都需關(guān)閉。示例1:使用open()方法打開文件“user1.txt”。file=open('user1.txt')file.close()這里使用的open()方法中沒有給出訪問模式,因此使用默認(rèn)只讀模式。如果打開的文件不存在,則會拋出FileNotFoundError。2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?2.文件的關(guān)閉示例2:使用open()方法打開文件“d:\user1.txt”,若文件不存在,則創(chuàng)建文件。#可寫模式打開文件。如果文件存在則覆蓋,文件不存在則創(chuàng)建文件。file=open('d:/user1.txt','w')file.close()注意:寫路徑時要注意斜杠問題,若路徑和文件名為“d:\user1.txt”,應(yīng)寫成“d:/user1.txt”或“d:\\user1.txt”2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?3.上下文管理語句with在Python中使用open()方法打開文件后,要使用close()方法將其關(guān)閉。每次如果都按照如上最終方案去寫的話,實(shí)在太繁瑣。Python引入了with語句來自動幫我們調(diào)用close()方法。語法格式如下:withopen(文件名[,打開方式])as文件對象名:#通過文件對象名讀寫文件內(nèi)容在實(shí)際程序開發(fā)中,讀寫文件應(yīng)優(yōu)先考慮使用上下文管理語句with。我們將在下面的文件讀取單元使用open()、close()方法,在文件寫入單元使用with,幫助大家對其有更深的了解。file=open('d:/user1.txt',’w’)file.close()withopen('d:/user1.txt',’w’)asfile:

2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?4.文件的讀取Python提供了3種從文件中讀取內(nèi)容的方式:read()、readline()和readlines()方法。(1)read()方法read()方法用于從文件中讀取指定字節(jié)數(shù)的內(nèi)容,其語法格式如下:文件對象名.read([size])其中size表示要從文件中讀取的數(shù)據(jù)的長度,單位為字節(jié)。如果沒有指定size或size為負(fù),則表示讀取文件中的全部數(shù)據(jù)。該方法返回從文件中讀取的字符串?!癲:/user1.txt”文件中的內(nèi)容如下:堅(jiān)持以人民為中心。示例3:file=open('d:/user1.txt','r')content1=file.read(1)print(content1)file.close()2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?4.文件的讀取“d:/user1.txt”文件中的內(nèi)容如下:堅(jiān)持以人民為中心。示例4:file=open('d:/user1.txt','r')content2=file.read(-1)print(content2)file.close()示例5:file=open('d:/user1.txt','r')content3=file.read()print(content3)file.close()2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?示例6:“d:/user1.txt”文件中的內(nèi)容如下:堅(jiān)持以人民為中心。file=open('d:/user1.txt','r')content1=file.read(1)print(content1)print('*'*15)content2=file.read(-1)print(content2)print('*'*15)content3=file.read()print(content3)print('*'*15)file.close()2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?4.文件的讀取Python提供了3種從文件中讀取內(nèi)容的方式:read()、readline()和readlines()方法。(2)readline()方法使用readline()方法可以讀取文件中的行,包括換行符“\n”。每執(zhí)行一次readline()方法就可以從文件中讀取一行。其語法格式如下:文件對象名.readline([size])其中size為從文件中讀取的字節(jié)數(shù),并不是讀取的行數(shù),這里需要特別注意。2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?(2)readline()方法示例7:file=open('d:/user1.txt','r')content1=file.readline()print(content1)print('*'*15)content2=file.readline(10)print(content2)print('*'*15)content3=file.readline()print(content3)print('*'*15)file.close()2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?4.文件的讀取Python提供了3種從文件中讀取內(nèi)容的方式:read()、readline()和readlines()方法。(3)readlines()方法使用readlines()方法可以讀取文件中的所有行,返回為列表,每一行的內(nèi)容作為列表中的一個元素。其語法格式如下:文件對象名.readlines()示例8:使用readlines()讀取“d:/user1.txt”文件。file=open('d:/user1.txt','r')lines=file.readlines()print(lines)print('*'*15)forlineinlines:print(line)file.close()2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?5.文件的寫入Python提供了2種從文件中讀取內(nèi)容的方式:write()、writelines()方法。(1)write()方法

write()方法用于向文件中寫入指定字符串,其語法格式如下:文件對象名.write(str)其中str表示要向文件中寫入的指定字符串。示例10:新建test1.txt文件,并寫入字符串“始終堅(jiān)持全心全意為人民服務(wù)的根本宗旨”。withopen('test2.txt','w')aswritefile: writefile.write('始終堅(jiān)持全心全意為人民服務(wù)的根本宗旨’)withopen('test2.txt','w',encoding='utf-8')aswritefile:

writefile.write('始終堅(jiān)持全心全意為人民服務(wù)的根本宗旨')2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?5.文件的寫入Python提供了2種從文件中讀取內(nèi)容的方式:write()、writelines()方法。(1)write()方法示例11:向文件中寫入多行字符串。withopen('test2.txt','w',encoding='utf-8')aswritefile: writefile.write('始終堅(jiān)持\n') writefile.write('全心全意\n') writefile.write('為人民服務(wù)的根本宗旨\n')2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?5.文件的寫入Python提供了2種從文件中讀取內(nèi)容的方式:write()、writelines()方法。(2)writelines()方法

writelines()方法用于向文件中寫入一序列的字符串,其語法格式如下:文件對象名.writelines(seq)其中seq表示要向文件中寫入的字符串序列。示例12:使用writelines()方法向'test2.txt'文件中追加以下內(nèi)容:堅(jiān)持以人民為中心,一切為了人民、一切依靠人民list_w=['堅(jiān)持以人民為中心,','一切為了人民、','一切依靠人民']#定義列表并保存要寫入文件的內(nèi)容withopen('test2.txt','a',encoding='utf-8')aswritefile:#以追加方式打開文件writefile.writelines(list_w)#向文件中追加字符串序列2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?5.文件的寫入Python提供了2種從文件中讀取內(nèi)容的方式:write()、writelines()方法。(2)writelines()方法list_1=[1,2,3,4,5]

list_2=list(map(str,list_1))

withopen('test2.txt','w',encoding='utf-8')aswritefile:

writefile.writelines(list_2)

#123452、為什么要學(xué)習(xí)Python?三、文件操作list_1=[1,2,3,4,5]

list_2=list(map(str,list_1))

t='\n'.join(list_2)

withopen('test2.txt','w',encoding='utf-8')aswritefile:

writefile.writelines(t)

運(yùn)行結(jié)果:1

2

3

4

53、怎么才能學(xué)好Python安全編程?6.文件的定位讓我們先來看一段程序:示例13:withopen('test2.txt','r',encoding='utf-8')asfile:r1=file.read()print(r1)r2=file.read()print(r2)2、為什么要學(xué)習(xí)Python?三、文件操作當(dāng)讀取文件內(nèi)容時,并不能重復(fù)讀取,第一次使用read()方法返回了文件內(nèi)容,而第二次使用read()方法卻返回了空。這是什么原因呢?原來這和文件指針有關(guān),當(dāng)對文件操作時,文件內(nèi)部會有一個文件指針來定位當(dāng)前位置,隨著文件讀寫操作而移動。當(dāng)使用‘r’方式打開文件時,文件指針在起始位置,使用read()方法則讀取了整個文件內(nèi)容,這時文件指針就在末尾,第二次使用read()方法讀取文件內(nèi)容時就從文件末尾開始讀取,所以就讀取不到任何內(nèi)容了。那么想要重復(fù)讀取文件內(nèi)容,只要控制文件指針就可以了。3、怎么才能學(xué)好Python安全編程?6.文件的定位(1)獲取當(dāng)前讀寫位置通過調(diào)用tell()方法可以獲取文件指針當(dāng)前位置,即文件指針當(dāng)前距離文件開頭的位置。其語法格式如下:文件對象名.tell()示例14:使用tell()方法獲取文件當(dāng)前的位置。withopen('test2.txt','r',encoding='utf-8')asfile:r1=file.tell()#獲取打開文件時文件指針的位置

print(r1)file.read(1)r2=file.tell()#獲取讀取1個字節(jié)后文件指針的位置

print(r2)file.read(2)r3=file.tell()#獲取繼續(xù)讀取2個字節(jié)后文件指針的位置

print(r3)2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?6.文件的定位(2)定位到指定位置通過調(diào)用seek()方法可以將文件指針定位到指定位置??梢酝ㄟ^設(shè)置文件新的當(dāng)前位置,實(shí)現(xiàn)在文件中跳轉(zhuǎn),完成對文件的任意訪問。其語法格式如下:文件對象名.seek(offset[,whence])其中,offset表示的是字節(jié)數(shù),也就是偏移量。whence表示起始點(diǎn),即位移量的參考點(diǎn),默認(rèn)值為0。whence有3個取值:①0表示文件開始處,默認(rèn)值為0。這時的偏移量offset必須是非負(fù)值。②1表示文件的當(dāng)前位置,偏移量offset可以是正值也可以是負(fù)值。③2表示文件結(jié)尾處,偏移量offset可以是正值也可以是負(fù)值。2、為什么要學(xué)習(xí)Python?三、文件操作3、怎么才能學(xué)好Python安全編程?6.文件的定位(2)定位到指定位置示例15:#用二進(jìn)制寫模式打開user.txt文件file=open('test3.txt','wb')file.write(b'12345')#設(shè)置文件當(dāng)前位置file.seek(-3,2)file.write(b'abc')file.close()file=open('test3.txt','r')content=file.readlines()print('返回偏移后文件內(nèi)容:',content)file.close()2、為什么要學(xué)習(xí)Python?三、文件操作withopen('test1.txt','wb')asfile:

file.write(b'12345')

#print(file.tell())

file.seek(4,2)

print(file.tell())

file.seek(4,1)

print(file.tell())

file.seek(4,0)

print(file.tell())9134目錄操作043、怎么才能學(xué)好Python安全編程?文件有兩個關(guān)鍵屬性:路徑和文件名。路徑指明了文件在磁盤上的位置。在Python中對目錄的操作主要有獲取當(dāng)前目錄、改變當(dāng)前目錄、創(chuàng)建和刪除目錄、遍歷目錄等。2、為什么要學(xué)習(xí)Python?四、目錄操作序號方法功能說明1os.rename(src,dst)重命名(從src到dst)文件或目錄,可以實(shí)現(xiàn)文件的移動,若目標(biāo)文件已存在,則拋出異常。2os.remove(path)刪除路徑為path的文件,如果path是目錄,則拋出異常。3os.getcwd()返回當(dāng)前工作目錄。4os.chdir(path)將path設(shè)為當(dāng)前工作目錄。5os.mkdir(path[,mode])創(chuàng)建目錄,要求上級目錄必須存在。參數(shù)mode為創(chuàng)建目錄的權(quán)限,默認(rèn)創(chuàng)建的目錄權(quán)限為可讀可寫可執(zhí)行。6os.makedirs(path)創(chuàng)建目錄,上級目錄可以不存在,在創(chuàng)建目錄時可以一次創(chuàng)建多級目錄。7os.rmdir(path)刪除path指定的目錄,要求目錄必須為空目錄,否則拋出異常。8os.removedirs(path)刪除多級目錄,目錄中不能有文件。9os.listdir(path)返回path目錄下的文件和目錄列表3、怎么才能學(xué)好Python安全編程?示例16:importospath1=os.getcwd()print(path1)os.mkdir('test1')os.makedirs('test2/tmp')os.chdir('test2/tmp')path2=os.getcwd()print(path2)withopen('test3.txt','w',encoding='utf-8')asfile:

file.write(path2)os.rename('test3.txt','test2.txt')os.rename('test2.txt',path1+'/test1/test1.txt')os.remove(path1+'/test1/test1.txt')os.makedirs('re_dir/tmp')os.removedirs('re_dir/tmp')t=os.listdir(path1)print(t)2、為什么要學(xué)習(xí)Python?四、目錄操作實(shí)現(xiàn)項(xiàng)目053、怎么才能學(xué)好Python安全編程?1、遍歷某目錄及子目錄,獲得文件列表2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目importos#導(dǎo)入os模塊path='test'foriinos.walk(path):print(i)運(yùn)行結(jié)果:('test',['tmp1','tmp2'],['t1.txt'])('test\\tmp1',['tmp1_1'],['t2.xls'])('test\\tmp1\\tmp1_1',[],[])('test\\tmp2',[],['t3.txt','t4.txt'])示例18:遍歷獲取指定目錄及子目錄中文件列表。importos#導(dǎo)入os模塊path='test'forroot,dirs,filesinos.walk(path):print(files)運(yùn)行結(jié)果:['t1.txt']['t2.xls'][]['t3.txt','t4.txt']3、怎么才能學(xué)好Python安全編程?2、從文件列表中篩選.txt文件要從文件列表中篩選.txt文件,可以在循環(huán)遍歷時在循環(huán)體內(nèi)加入if語句,使用endswith()方法判斷字符串是否以指定后綴結(jié)尾,如果是則返回True,否則返回False。示例19:使用endswith()方法篩選.txt文件。importos#導(dǎo)入os模塊path='test'forroot,dirs,filesinos.walk(path):#遍歷獲得當(dāng)前目錄及子目錄下的目錄和文件列表

foriinfiles:#遍歷文件列表

ifi.endswith('.txt'):#判斷后綴是否為.txtprint(i)運(yùn)行結(jié)果:t1.txtt3.txtt4.txt2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目3、怎么才能學(xué)好Python安全編程?2、從文件列表中篩選.txt文件由于endswith()方法只能用在字符串類型的數(shù)據(jù)上,因此需要嵌套一個for循環(huán)來遍歷文件列表。如果只需獲得指定目錄下的文件列表,不包含子目錄,也可以使用以下代碼。示例20:importos#導(dǎo)入os模塊path='test'forfilesinos.listdir(path):#遍歷獲得當(dāng)前目錄下的目錄和文件列表

iffiles.endswith('.txt'):#判斷后綴是否為.txtprint(files)運(yùn)行結(jié)果:t1.txt2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目3、怎么才能學(xué)好Python安全編程?2、從文件列表中篩選.txt文件示例20也可以用列表表達(dá)式的方法,代碼如下:importos#導(dǎo)入os模塊path='test'li=[iforiinos.listdir(path)ifi.endswith('.txt')]print(li)2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目3、怎么才能學(xué)好Python安全編程?2、從文件列表中篩選.txt文件除了可以使用字符串的endswith()方法篩選外,也可以使用os.path.splitext(file)方法將文件名和后綴名切割開,以字符串元組形式保存。importos#導(dǎo)入os模塊path='test'forroot,dirs,filesinos.walk(path):#遍歷獲得當(dāng)前目錄及子目錄下的目錄和文件列表

foriinfiles:#遍歷文件列表

file_com=os.path.splitext(i)iffile_com[1]=='.txt':#判斷后綴是否為.txtprint(i)運(yùn)行結(jié)果:t1.txtt3.txtt4.txt2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目3、怎么才能學(xué)好Python安全編程?2、從文件列表中篩選.txt文件Python的os.path模塊提供了大量用于路徑判斷、文件屬性獲取的方法,os.path模塊常用方法如下:2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目序號方法功能說明1os.path.abspath(path)返回給定路徑的絕對路徑。2os.path.split(path)將path分割成目錄和文件名的二元組并返回。3os.path.splitext(path)將path分割成文件名和后綴名(擴(kuò)展名)的二元組并返回。4os.path.exists(path)判斷path是否存在,如果存在,返回True;如果不存在,返回False。5os.path.getsize(path)返回path文件的大?。ㄗ止?jié))。6os.path.getatime(path)得到指定文件最后一次的訪問時間。7os.path.getctime(path)得到指定文件的創(chuàng)建時間。8os.path.getmtime(path)得到指定文件最后一次的修改時間。9os.path.join(path1[,path2[,......]])將多個路徑組合后返回3、怎么才能學(xué)好Python安全編程?3、依次打開每個文本文件,檢查是否含有A內(nèi)容要打開文件,就需要知道文件的路徑和文件名,可以通過在示例19的基礎(chǔ)上,把路徑和文件名組合成字符串保存到新列表中。示例21:得到文本文件相對路徑和文件名列表。importos#導(dǎo)入os模塊path='test'listfile=[]forroot,dirs,filesinos.walk(path):#遍歷獲得當(dāng)前目錄及子目錄下的目錄和文件列表

foriinfiles:#遍歷文件列表

ifi.endswith('.txt'):#判斷后綴是否為.txtlistfile.append(os.path.join(root,i))#將路徑和文件名組合后添加到列表中print(listfile)運(yùn)行結(jié)果:['test\\t1.txt','test\\tmp2\\t3.txt','test\\tmp2\\t4.txt']2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目3、怎么才能學(xué)好Python安全編程?3、依次打開每個文本文件,檢查是否含有A內(nèi)容示例22:循環(huán)遍歷文本文件列表,依次打開每個文本文件,檢查是否含有A內(nèi)容。importos#導(dǎo)入os模塊path='test'listfile=[]A='servers_list'forroot,dirs,filesinos.walk(path):#遍歷獲得當(dāng)前目錄及子目錄下的目錄和文件列表

foriinfiles:#遍歷文件列表

ifi.endswith('.txt'):#判斷后綴是否為.txtlistfile.append(os.path.join(root,i))#將路徑和文件名組合后添加到列表中l(wèi)istfile2=[]#存放含有A內(nèi)容的文本文件forjinlistfile:#循環(huán)遍歷文件列表

withopen(j,'r',encoding='utf-8')asfile:#以只讀方式打開文件

con=file.read()#讀取文件內(nèi)容

ifAincon:#如果A內(nèi)容存在文件中

listfile2.append(j)#將該文件路徑和文件名添加到新列表中print(listfile2)2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目運(yùn)行結(jié)果:['test\\tmp2\\t3.txt']3、怎么才能學(xué)好Python安全編程?4、復(fù)制文件并重命名shutil模塊也提供了大量方法支持文件和目錄操作,主要包括復(fù)制、移動、重命名、備份和刪除目錄等,是文件的高級操作,常用方法如表所示。2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目序號方法功能說明1shutil.copy(src,dst)復(fù)制文件內(nèi)容及權(quán)限,如果目標(biāo)文件已經(jīng)存在,則拋出異常。2shutil.copy2(src,dst)復(fù)制文件內(nèi)容及文件的所有狀態(tài)信息,如果目標(biāo)文件已經(jīng)存在,則拋出異常。3shutil.copyfile(src,dst)復(fù)制文件,不復(fù)制文件屬性。如果目標(biāo)文件已存在則直接覆蓋。4shutil.copytree(src,dst)遞歸復(fù)制文件內(nèi)容及狀態(tài)信息。5shutil.rmtree(path)遞歸刪除目錄。6shutil.move(src,dst)移動文件或遞歸移動目錄,也可給文件和目錄重命名。3、怎么才能學(xué)好Python安全編程?4、復(fù)制文件并重命名示例23:使用shutil模塊的copy()方法實(shí)現(xiàn)復(fù)制文件并重命名。importos,shutil#導(dǎo)入os和shutil模塊path='test'dstpath='d:/test'listfile=[]A='servers_list'forroot,dirs,filesinos.walk(path):#遍歷獲得當(dāng)前目錄及子目錄下的目錄和文件列表

foriinfiles:#遍歷文件列表

ifi.endswith('.txt'):#判斷后綴是否為.txtlistfile.append(os.path.join(root,i))#將路徑和文件名組合后添加到列表中forjinlistfile:#循環(huán)遍歷文件列表

withopen(j,'r',encoding='utf-8')asfile:#以只讀方式打開文件

con=file.read()#讀取文件內(nèi)容

ifAincon:#如果A內(nèi)容存在文件中

t=j.split('\\')[-1]#從路徑中獲取文件名

n_c=os.path.splitext(t)#將文件名和后綴分開

dstfile=os.path.join(dstpath,n_c[0]+'_B'+n_c[1])#生成目標(biāo)文件路徑和文件名

shutil.copy(j,dstfile)#復(fù)制文件2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目3、怎么才能學(xué)好Python安全編程?5、檢查文件是否被修改示例24:將文件路徑、文件名和最后修改時間保存至一個文本文件。importos#導(dǎo)入os模塊path='test'A='servers_list'forroot,dirs,filesinos.walk(path):#遍歷獲得當(dāng)前目錄及子目錄下的目錄和文件列表

foriinfiles:#遍歷文件列表

ifi.endswith('.txt'):#判斷后綴是否為.txtwithopen('update.txt','a',encoding='utf-8')asfile:#以追加方式打開文件

dstpath=os.path.join(root,i)#組合文件路徑和文件名

endmodidata=str(os.path.getmtime(dstpath))#得到文件最后一次修改時間,并轉(zhuǎn)換為字符串型

file.write(dstpath+'|'+endmodidata+'\n')#將路徑、文件名的組合和最后一次修改時間寫入文件中運(yùn)行結(jié)果:update.txt中的內(nèi)容test\t1.txt|1630507122.7912314test\tmp2\t3.txt|1630426721.3132508test\tmp2\t4.txt|1630330352.4292882、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目3、怎么才能學(xué)好Python安全編程?5、檢查文件是否被修改示例25:重新獲得最后修改時間,并于update.txt中的時間進(jìn)行比較。importos#導(dǎo)入os模塊path='test'listfile=[]A='servers_list'forroot,dirs,filesinos.walk(path):#遍歷獲得當(dāng)前目錄及子目錄下的目錄和文件列表

foriinfiles:#遍歷文件列表

ifi.endswith('.txt'):#判斷后綴是否為.txtdstpath=os.path.join(root,i)#組合文件路徑和文件名

endmoditime=str(os.path.getmtime(dstpath))#得到文件最后一次修改時間,并轉(zhuǎn)換為字符串型

withopen('update.txt','r',encoding='utf-8')asfile:#以只讀方式打開文件

forlineinfile:#按行遍歷文件

ifiinline:#如果當(dāng)前文件名存在于update.txt文件的遍歷行

line=line.strip('\n')#去除該行的換行符

newtime=line.split('|')[-1]#切割字符串,取第2個元素,也就是得到最后一次修改時間

ifendmoditime!=newtime:#如果當(dāng)前修改時間與update.txt中的最后一次修改時間不一致

listfile.append(i)#將該文件名添加到列表中print(listfile)運(yùn)行結(jié)果:運(yùn)行該程序前,我們對t1.txt文件做了修改。['t1.txt']2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目3、怎么才能學(xué)好Python安全編程?5、檢查文件是否被修改2.根據(jù)文件大小判斷文件是否被修改,其實(shí)現(xiàn)思路如下:(1)將文件路徑、文件名和文件大小保存至一個文本文件。(2)當(dāng)需要檢查時,遍歷目錄及子目錄下的文件,得到文件大小,與之前保存的文件大小進(jìn)行比較。從實(shí)現(xiàn)思路來看,基本和示例24和示例25相似。只需將代碼中os.path.getmtime(dstpath)替換為os.path.getsize(dstpath)即可。3.根據(jù)文件MD5值判斷文件是否被修改,其實(shí)現(xiàn)思路如下:(1)將目錄及子目錄中的文件進(jìn)行md5加密并寫入到文件中。(2)當(dāng)需要檢查時,判斷md5值是否變化。示例26:importosimporthashlib#coding:GBKdir_path=r'D:\test'file_lst=[]2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目#將目錄及子目錄中的文件進(jìn)行md5加密并寫入到文件中#文件被修改后其MD5值也會改變,所以可以用來判斷一個文件是否被修改過defGetFileMd5(filename):myhash=hashlib.md5()withopen(filename,'rb')asf:#防止文件太大,內(nèi)存不足

whileTrue:buf=f.read(4096)ifnotbuf:breakmyhash.update(buf)f.close()returnfilename,myhash.hexdigest()#遍歷目錄及子目錄下的文件路徑list_md5=[]withopen('md5.txt','a')asfmd5:forfilepathinfile_lst:fmd5.writelines(''.join(GetFileMd5(filepath)))fmd5.write('\n')fmd5.close()3、怎么才能學(xué)好Python安全編程?6、刪除重復(fù)文件語法格式如下:filecmp.cmp(f1,f2[,shallow])另外,也可以比較兩個目錄內(nèi)指定文件是否相同。語法格式如下:filecmp.cmpfiles(dir1,dir2,common[,shallow])比較兩個目錄夾內(nèi)指定文件是否相同。參數(shù)dir1,dir2指定要比較的目錄,參數(shù)common指定要比較的文件名列表。函數(shù)返回包含3個list元素的元組,分別表示匹配、不匹配以及錯誤的文件列表。錯誤的文件指的是不存在的文件,或文件被瑣定不可讀,或沒權(quán)限讀文件,或者由于其他原因訪問不了該文件。2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目3、怎么才能學(xué)好Python安全編程?6、刪除重復(fù)文件示例27:importosimportglobimportfilecmpimporthashlib#coding:GBKdir_path=r'D:\test'file_lst=[]2、為什么要學(xué)習(xí)Python?五、實(shí)現(xiàn)項(xiàng)目#遍歷目錄和子目錄,得到文件列表foriinglob.glob(dir_path+'/**/*',recursive=True):ifos.path.isfile(i):file_lst.append(i)#檢查不同目錄中相同的文件forfile1infile_lst:forfile2infile_lst:iffile1!=file2andos.path.exists(file1)andos.path.exists(file2):iffilecmp.cmp(file1,file2):os.remove(file2)THANKSLOGO程序設(shè)計(jì)基礎(chǔ)——錯誤和異常簡單易學(xué)易讀易維護(hù)開源

可移植性

可擴(kuò)展性

豐富的庫

Python目錄CONTENTS項(xiàng)目描述01語法錯誤的識別與處理02捕捉異常03異常處理04思政導(dǎo)入2004年8月17日在美國加州圣巴巴拉召開的國際密碼學(xué)會議(Crypto’2004)安排了三場關(guān)于雜湊函數(shù)的特別報告。在國際著名密碼學(xué)家EliBiham和AntoineJoux相繼做了對SHA-1的分析與給出SHA-0的一個碰撞之后,來自山東大學(xué)的王小云教授做了破譯MD5、HAVAL-128、MD4和RIPEMD算法的報告。在會場上,當(dāng)她公布了MD系列算法的破解結(jié)果之后,報告被激動的掌聲打斷。王小云教授的報告轟動了全場,得到了與會專家的贊嘆。報告結(jié)束時,與會者長時間熱烈鼓掌,部分學(xué)者起立鼓掌致敬,這在密碼學(xué)會議上是少見的盛況。項(xiàng)目描述01一、項(xiàng)目描述在程序運(yùn)行過程中,總會遇到各種各樣的錯誤。有的錯誤是程序編寫有問題造成的,比如本來應(yīng)該輸出整數(shù)結(jié)果輸出了字符串,這種錯誤我們通常稱之為bug,bug是必須修復(fù)的。有的錯誤是用戶輸入造成的,比如讓用戶輸入email地址,結(jié)果得到一個空字符串,這種錯誤可以通過檢查用戶輸入來做相應(yīng)的處理。還有一類錯誤是完全無法在程序運(yùn)行過程中預(yù)測的,比如寫入文件的時候,磁盤滿了,寫不進(jìn)去了,或者從網(wǎng)絡(luò)抓取數(shù)據(jù),網(wǎng)絡(luò)突然斷掉了。這類錯誤也稱為異常,在程序中通常是必須處理的,否則,程序會因?yàn)楦鞣N問題終止并退出。Python內(nèi)置了一套異常處理機(jī)制,來幫助我們進(jìn)行錯誤處理。語法錯誤的識別與處理02二、語法錯誤的識別與處理語法錯誤也稱為解析錯誤,Python是一門先編譯后解釋的語言。在編譯時,如果程序中存在語法錯誤,Python編譯器就會顯示文件名、行號等信息,并使用^標(biāo)記在該行程序中檢測出錯的位置。i=1whileTrueidiom=input("請輸入第"+str(i)+"個成語:")二、語法錯誤的識別與處理對于這類語法錯誤的發(fā)現(xiàn)還是比較容易的,因?yàn)镻ython編譯器直接告訴了我們錯誤的位置,我們只需要在該位置改正這個語法錯誤就可以了。但是有時編譯器告訴我們的語法錯誤不是那么容易發(fā)現(xiàn)的,根據(jù)提示的行號與標(biāo)記也是找不到語法錯誤的地方。importos#user.txt為存在于當(dāng)前目錄的一個文件print(os.path.exists(('user.txt'))#判斷目標(biāo)是否存在print(os.path.isdir('user.txt'))#判斷目標(biāo)是否目錄print(os.path.isfile('user.txt'))#判斷目標(biāo)是否文件捕捉異常033、怎么才能學(xué)好Python安全編程?1.

ZeroDivisionError異常2、為什么要學(xué)習(xí)Python?三、捕捉異常10*(1/0)3、怎么才能學(xué)好Python安全編程?2.

NameError異常2、為什么要學(xué)習(xí)Python?三、捕捉異常4+idiom*33、怎么才能學(xué)好Python安全編程?3.

TypeError異常2、為什么要學(xué)習(xí)Python?三、捕捉異常'1'+13、怎么才能學(xué)好Python安全編程?4.

IndexError異常2、為什么要學(xué)習(xí)Python?三

溫馨提示

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

評論

0/150

提交評論