




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
例5-1調(diào)用read()方法讀取文件內(nèi)容本例調(diào)用read()方法讀取hello.txt文件中的內(nèi)容。helloFile=open("D:\\python\\hello.txt")fileContent=helloFile.read()helloFile.close()print(fileContent)輸入結(jié)果:Hello!JiangsuNanjing代碼解釋:(1)打開文件helloFile=open("D:\\python\\hello.txt")使用open()函數(shù)以默認(rèn)的讀模式("r")打開位于D:\python\hello.txt的文件,并將文件對象存儲在變量helloFile中。(2)讀取文件內(nèi)容fileContent=helloFile.read()調(diào)用文件對象的read()方法,讀取文件的全部內(nèi)容,并將其存儲在變量fileContent中。read()方法會讀取文件中的所有字符,直到文件末尾。(3)關(guān)閉文件helloFile.close()使用close()方法關(guān)閉文件,釋放系統(tǒng)資源。(4)輸出文件內(nèi)容print(fileContent)打印讀取到的文件內(nèi)容。例5-2參數(shù)一次讀取3個字符本例代碼的功能是逐段讀取一個文本文件的內(nèi)容,并將其拼接后輸出。helloFile=open("D:\\python\\hello.txt")fileContent=""whileTrue:fragment=helloFile.read(3)iffragment=="":#或者可以使用ifnotfragmentbreakfileContent+=fragmenthelloFile.close()print(fileContent)輸入結(jié)果:Hello,world!代碼解釋:(1)打開文件helloFile=open("D:\\python\\hello.txt")使用open()函數(shù)以默認(rèn)的讀模式("r")打開位于D:\python\hello.txt的文件,并將文件對象存儲在變量helloFile中。(2)初始化變量fileContent=""初始化一個空字符串fileContent,用于存儲文件的全部內(nèi)容。(3)逐段讀取文件內(nèi)容whileTrue:fragment=helloFile.read(3)iffragment=="":#或者可以使用ifnotfragmentbreakfileContent+=fragment使用whileTrue創(chuàng)建一個無限循環(huán),用于逐段讀取文件內(nèi)容。每次調(diào)用helloFile.read(3)從文件中讀取3個字符,并將結(jié)果存儲在變量fragment中。如果fragment為空字符串(即""),表示已經(jīng)到達(dá)文件末尾,使用break退出循環(huán)。如果fragment不為空,將其內(nèi)容追加到fileContent中。(4)關(guān)閉文件helloFile.close()使用close()方法關(guān)閉文件,釋放系統(tǒng)資源。(5)輸出文件內(nèi)容print(fileContent)打印拼接后的文件內(nèi)容。例5-3調(diào)用readline()方法本例將調(diào)用readline()方法讀取hello.txt文件的內(nèi)容。helloFile=open("D:\\python\\hello.txt")fileContent=""whileTrue:line=helloFile.readline()ifline=="":#或者可以使用ifnotlinebreakfileContent+=linehelloFile.close()print(fileContent)輸入結(jié)果:Hello,world!Thisisatestfile.代碼解釋:(1)打開文件helloFile=open("D:\\python\\hello.txt")使用open()函數(shù)以默認(rèn)的讀模式("r")打開位于D:\python\hello.txt的文件,并將文件對象存儲在變量helloFile中。(2)初始化變量fileContent=""初始化一個空字符串fileContent,用于存儲文件的全部內(nèi)容。(3)逐行讀取文件內(nèi)容whileTrue:line=helloFile.readline()ifline=="":#或者可以使用ifnotlinebreakfileContent+=line使用whileTrue創(chuàng)建一個無限循環(huán),用于逐行讀取文件內(nèi)容。每次調(diào)用helloFile.readline()從文件中讀取一行,并將結(jié)果存儲在變量line中。如果line為空字符串(即""),表示已經(jīng)到達(dá)文件末尾,使用break退出循環(huán)。如果line不為空,將其內(nèi)容追加到fileContent中。(4)關(guān)閉文件helloFile.close()使用close()方法關(guān)閉文件,釋放系統(tǒng)資源。(5)輸出文件內(nèi)容print(fileContent)打印拼接后的文件內(nèi)容。例5-4使用readlines()方法讀取文件本例代碼的功能是讀取一個文本文件的所有行,并將它們存儲在一個列表中,然后逐行打印這些內(nèi)容。helloFile=open("d:\\python\\hello.txt")fileContent=helloFile.readlines()helloFile.close()print(fileContent)forlineinfileContent:#輸出列表中的每一行print(line)輸入結(jié)果:['Hello,world!\n','Thisisatestfile.\n']Hello,world!Thisisatestfile.代碼解釋:(1)打開文件helloFile=open("d:\\python\\hello.txt")使用open()函數(shù)以默認(rèn)的讀模式("r")打開位于d:\python\hello.txt的文件,并將文件對象存儲在變量helloFile中。(2)讀取文件的所有行fileContent=helloFile.readlines()調(diào)用文件對象的readlines()方法,讀取文件的所有行,并將每一行作為一個元素存儲在列表fileContent中。readlines()方法會返回一個包含文件所有行的列表,每行是一個字符串,包括行尾的換行符\n。(3)關(guān)閉文件helloFile.close()使用close()方法關(guān)閉文件,釋放系統(tǒng)資源。(4)打印文件內(nèi)容print(fileContent)打印整個列表fileContent,顯示文件的所有行。(5)逐行打印文件內(nèi)容forlineinfileContent:#輸出列表中的每一行print(line)使用for循環(huán)遍歷列表fileContent,逐行打印每一行的內(nèi)容。每行內(nèi)容已經(jīng)包含換行符\n,因此打印時會自動換行。例5-5使用write()方法寫入文件本例代碼的功能是向一個文本文件寫入內(nèi)容,并在寫入后讀取并打印文件的全部內(nèi)容。helloFile=open("d:\\python\\hello.txt","w")helloFile.write("Firstline.\nSecondline.\n")helloFile.close()helloFile=open("d:\\python\\hello.txt","a")helloFile.write("thirdline.")helloFile.close()helloFile=open("d:\\python\\hello.txt")fileContent=helloFile.read()helloFile.close()print(fileContent)輸入結(jié)果:Firstline.Secondline.thirdline.代碼解釋:(1)以寫模式打開文件并寫入內(nèi)容helloFile=open("d:\\python\\hello.txt","w")helloFile.write("Firstline.\nSecondline.\n")helloFile.close()使用open()函數(shù)以寫模式("w")打開文件d:\python\hello.txt。如果文件不存在,會自動創(chuàng)建;如果文件已存在,則會清空文件內(nèi)容。使用write()方法向文件寫入兩行內(nèi)容,每行內(nèi)容之間用換行符\n分隔。寫入完成后,使用close()方法關(guān)閉文件。(2)以追加模式打開文件并寫入內(nèi)容helloFile=open("d:\\python\\hello.txt","a")helloFile.write("thirdline.")helloFile.close()使用open()函數(shù)以追加模式("a")打開文件d:\python\hello.txt。追加模式會在文件末尾添加內(nèi)容,不會清空原有內(nèi)容。使用write()方法向文件追加一行內(nèi)容。寫入完成后,使用close()方法關(guān)閉文件。(3)以讀模式打開文件并讀取內(nèi)容helloFile=open("d:\\python\\hello.txt")fileContent=helloFile.read()helloFile.close()使用open()函數(shù)以默認(rèn)的讀模式("r")打開文件d:\python\hello.txt。使用read()方法讀取文件的全部內(nèi)容,并將結(jié)果存儲在變量fileContent中。讀取完成后,使用close()方法關(guān)閉文件。(4)打印文件內(nèi)容print(fileContent)打印讀取到的文件內(nèi)容。例5-6自定義函數(shù)copy_file本例自定義函數(shù)copy_file,用于實(shí)現(xiàn)文件復(fù)制功能。copy_file函數(shù)需要兩個參數(shù):源文件oldfile和目標(biāo)文件newfile。該函數(shù)將以讀模式打開源文件,以寫模式打開目標(biāo)文件,然后從源文件中一次讀取50個字符并寫入目標(biāo)文件。當(dāng)讀取到文件末尾時,條件fileContent==""成立,循環(huán)將退出并關(guān)閉兩個文件。defcopy_file(oldfile,newfile):oldFile=open(oldfile,"r")newFile=open(newfile,"w")whileTrue:fileContent=oldFile.read(50)iffileContent=="":#讀到文件末尾時breaknewFile.write(fileContent)oldFile.close()newFile.close()returncopy_file("d:\\python\\hello.txt","d:\\python\\hello2.txt")輸入結(jié)果:Hello,world!Thisisatestfile.代碼解釋:(1)定義函數(shù)defcopy_file(oldfile,newfile):定義了一個名為copy_file的函數(shù),接受兩個參數(shù):oldfile:源文件的路徑。newfile:目標(biāo)文件的路徑。(2)打開源文件和目標(biāo)文件oldFile=open(oldfile,"r")newFile=open(newfile,"w")使用open()函數(shù)以讀模式("r")打開源文件oldfile,并將文件對象存儲在變量oldFile中。使用open()函數(shù)以寫模式("w")打開目標(biāo)文件newfile,并將文件對象存儲在變量newFile中。如果目標(biāo)文件已存在,其內(nèi)容將被清空;如果不存在,則會創(chuàng)建一個新文件。(3)逐塊讀取并寫入文件內(nèi)容whileTrue:fileContent=oldFile.read(50)iffileContent=="":#讀到文件末尾時breaknewFile.write(fileContent)使用whileTrue創(chuàng)建一個無限循環(huán),用于逐塊讀取源文件的內(nèi)容。每次調(diào)用oldFile.read(50)從源文件中讀取50個字符,并將結(jié)果存儲在變量fileContent中。如果fileContent為空字符串(即""),表示已經(jīng)到達(dá)文件末尾,使用break退出循環(huán)。如果fileContent不為空,將其內(nèi)容寫入目標(biāo)文件newFile中。(4)關(guān)閉文件oldFile.close()newFile.close()使用close()方法關(guān)閉源文件和目標(biāo)文件,釋放系統(tǒng)資源。(5)返回return函數(shù)執(zhí)行完畢后返回。雖然這里沒有顯式返回任何值,但return語句表示函數(shù)的結(jié)束。(6)調(diào)用函數(shù)copy_file("d:\\python\\hello.txt","d:\\python\\hello2.txt")調(diào)用copy_file函數(shù),將d:\python\hello.txt的內(nèi)容復(fù)制到d:\python\hello2.txt。例5-7調(diào)用read()方法讀取文件內(nèi)容本例代碼的功能是向一個文件寫入內(nèi)容,然后通過移動文件指針修改部分內(nèi)容,最后讀取并打印文件的最終內(nèi)容。exampleFile=open("d:\\python\\hello.txt","w")exampleFile.write("0123456789")exampleFile.seek(3)exampleFile.write("ZUT")exampleFile.close()exampleFile=open("d:\\python\\hello.txt")s=exampleFile.read()print(s)exampleFile.close()輸入結(jié)果:012ZUT6789代碼解釋:(1)以寫模式打開文件并寫入內(nèi)容exampleFile=open("d:\\python\\hello.txt","w")exampleFile.write("0123456789")使用open()函數(shù)以寫模式("w")打開文件d:\python\hello.txt。如果文件不存在,會自動創(chuàng)建;如果文件已存在,則會清空文件內(nèi)容。使用write()方法向文件寫入字符串"0123456789"。(2)移動文件指針并修改內(nèi)容exampleFile.seek(3)exampleFile.write("ZUT")使用seek(3)方法將文件指針移動到文件的第4個字符位置(索引從0開始)。使用write("ZUT")方法從當(dāng)前指針位置開始寫入字符串"ZUT",覆蓋原有內(nèi)容。(3)關(guān)閉文件exampleFile.close()exampleFile.close()使用close()方法關(guān)閉文件,確保所有寫入操作完成并釋放系統(tǒng)資源。(4)以讀模式打開文件并讀取內(nèi)容exampleFile=open("d:\\python\\hello.txt")s=exampleFile.read()使用open()函數(shù)以默認(rèn)的讀模式("r")打開文件d:\python\hello.txt。使用read()方法讀取文件的全部內(nèi)容,并將結(jié)果存儲在變量s中。(5)打印文件內(nèi)容print(s)打印讀取到的文件內(nèi)容。(6)關(guān)閉文件exampleFile.close()使用close()方法關(guān)閉文件,釋放系統(tǒng)資源。例5-8統(tǒng)計文件夾下所有文件的大小本例代碼的功能是計算指定目錄下所有文件的總大小。importostotalSize=0#初始化總大小變量os.chdir("d:\\python")#切換到目標(biāo)文件夾forfileNameinos.listdir(os.getcwd()):#遍歷當(dāng)前工作目錄中的所有文件totalSize+=os.path.getsize(fileName)#累加每個文件的大小print(totalSize)#打印總大小輸入結(jié)果:600代碼解釋:(1)初始化總大小變量totalSize=0初始化一個變量totalSize,用于存儲所有文件的總大小,初始值為0。(2)切換到目標(biāo)文件夾os.chdir("d:\\python")使用os.chdir()方法切換當(dāng)前工作目錄到d:\python。如果該路徑不存在,會拋出FileNotFoundError。(3)遍歷當(dāng)前工作目錄中的所有文件forfileNameinos.listdir(os.getcwd()):使用os.getcwd()獲取當(dāng)前工作目錄的路徑。使用os.listdir()方法獲取當(dāng)前工作目錄中的所有文件和子目錄的名稱列表。使用for循環(huán)遍歷這些名稱。(4)累加每個文件的大小totalSize+=os.path.getsize(fileName)使用os.path.getsize()方法獲取當(dāng)前文件的大小(以字節(jié)為單位)。將文件大小累加到totalSize中。(5)打印總大小print(totalSize)打印所有文件的總大小。例5-9顯示文件夾所有文件及子目錄本例代碼的功能是遍歷指定目錄及其所有子目錄,并打印每個目錄的名稱、子目錄和文件。importoslist_dirs=os.walk("d:\\技術(shù)資料")#返回一個元組print(list(list_dirs))forfolderName,subFolders,fileNamesinos.walk("d:\\技術(shù)資料"):print("當(dāng)前目錄:"+folderName)forsubFolderinsubFolders:print(folderName+"的子目錄是--"+subFolder)forfileNameinfileNames:print(folderName+"的文件是--"+fileName)輸入結(jié)果:[('d:\\技術(shù)資料',['資料1','資料2'],[]),('d:\\技術(shù)資料\\資料1',[],['文件1.txt','文件2.txt']),('d:\\技術(shù)資料\\資料2',['子資料2'],['文件3.txt']),('d:\\技術(shù)資料\\資料2\\子資料2',[],['文件4.txt'])]當(dāng)前目錄:d:\技術(shù)資料d:\技術(shù)資料的子目錄是--資料1d:\技術(shù)資料的子目錄是--資料2當(dāng)前目錄:d:\技術(shù)資料\資料1d:\技術(shù)資料\資料1的文件是--文件1.txtd:\技術(shù)資料\資料1的文件是--文件2.txt當(dāng)前目錄:d:\技術(shù)資料\資料2d:\技術(shù)資料\資料2的子目錄是--子資料2d:\技術(shù)資料\資料2的文件是--文件3.txt當(dāng)前目錄:d:\技術(shù)資料\資料2\子資料2d:\技術(shù)資料\資料2\子資料2的文件是--文件4.txt代碼解釋:(1)使用os.walk()遍歷目錄list_dirs=os.walk("d:\\技術(shù)資料")#返回一個元組print(list(list_dirs))os.walk("d:\\技術(shù)資料")生成一個三元組(folderName,subFolders,fileNames),分別表示當(dāng)前目錄的名稱、子目錄列表和文件列表。list(list_dirs)將生成器轉(zhuǎn)換為列表,打印出所有目錄及其子目錄和文件的完整結(jié)構(gòu)。(2)遍歷目錄并打印信息forfolderName,subFolders,fileNamesinos.walk("d:\\技術(shù)資料"):print("當(dāng)前目錄:"+folderName)forsubFolderinsubFolders:print(folderName+"的子目錄是--"+subFolder)forfileNameinfileNames:print(folderName+"的文件是--"+fileName)使用for循環(huán)遍歷os.walk()返回的每個三元組。folderName:當(dāng)前目錄的名稱。subFolders:當(dāng)前目錄下的子目錄列表。fileNames:當(dāng)前目錄下的文件列表。打印當(dāng)前目錄的名稱。遍歷subFolders,打印每個子目錄的名稱。遍歷fileNames,打印每個文件的名稱。例5-10生成隨機(jī)數(shù)本例將生成隨機(jī)數(shù),并將結(jié)果寫入文本文件。使用random模塊中的randint()方法生成1到122之間的隨機(jī)數(shù),以產(chǎn)生對應(yīng)字符的ASCII碼。程序?qū)⒅鹨粚M足以下條件的字符(包括大寫字母、小寫字母、數(shù)字以及一些特殊符號如\n、\r、*、&、^和$)寫入文本文件d:\test.txt中,直到寫入的字符數(shù)量達(dá)到10001個時停止。importrandom#打開文件test.txt,使用寫入模式f=open('test.txt','w')whileTrue:#生成1到122之間的隨機(jī)數(shù)i=random.randint(1,122)#將隨機(jī)數(shù)轉(zhuǎn)換為字符x=chr(i)#檢查字符是否符合條件ifx.isupper()orx.islower()orx.isdigit()orxin['\n','\r','*','&','^','$']:f.write(x)#寫入字符#檢查當(dāng)前文件的長度是否超過10000iff.tell()>10000:break#達(dá)到條件后退出循環(huán)#關(guān)閉文件f.close()代碼解釋:(1)打開文件importrandom使用open()函數(shù)以寫模式("w")打開文件test.txt。如果文件不存在,會自動創(chuàng)建;如果文件已存在,則會清空文件內(nèi)容。(2)生成隨機(jī)字符并寫入文件whileTrue:#生成1到122之間的隨機(jī)數(shù)i=random.randint(1,122)#將隨機(jī)數(shù)轉(zhuǎn)換為字符x=chr(i)#檢查字符是否符合條件ifx.isupper()orx.islower()orx.isdigit()orxin['\n','\r','*','&','^','$']:f.write(x)#寫入字符#檢查當(dāng)前文件的長度是否超過10000iff.tell()>10000:break#達(dá)到條件后退出循環(huán)使用whileTrue創(chuàng)建一個無限循環(huán),用于生成隨機(jī)字符并寫入文件。每次調(diào)用random.randint(1,122)生成一個1到122之間的隨機(jī)整數(shù)。使用chr(i)將隨機(jī)整數(shù)轉(zhuǎn)換為對應(yīng)的字符。檢查生成的字符是否符合條件:①是大寫字母(x.isupper())。②是小寫字母(x.islower())。③是數(shù)字(x.isdigit())。④是特殊字符(\n,\r,*,&,^,$)。如果字符符合條件,使用f.write(x)將字符寫入文件。使用f.tell()獲取當(dāng)前文件指針的位置(即文件的當(dāng)前長度)。如果文件長度超過10000字節(jié),使用break退出循環(huán)。(3)關(guān)閉文件f.close()使用close()方法關(guān)閉文件,確保所有寫入操作完成并釋放系統(tǒng)資源。例5-11輸出文件中的字符本例將逐個字節(jié)輸出例5-10生成的test.txt文件的前50個字節(jié)和后100個字節(jié)字符??梢允褂胷ead(100)方法直接讀取文件的前50個字節(jié)字符。使用seek(-100,2)方法將文件指針移動到文件的最后100個字節(jié)位置,然后使用read(100)方法讀取最后100個字節(jié)字符。withopen('d:/test.txt','rb')asf:#使用'rb'以字節(jié)模式打開文件#讀取前100個字節(jié)的字符a=f.read(50)#將文件指針移動到最后100個字節(jié)的位置f.seek(0,2)#移動到文件末尾file_size=f.tell()#獲取文件大小iffile_size<100:f.seek(0)#如果文件小于100字節(jié),則從文件開頭讀取else:f.seek(-100,2)#否則移動到倒數(shù)100字節(jié)#讀取最后100個字節(jié)的字符b=f.read(100)#輸出讀取的內(nèi)容print(a)print(b)輸出結(jié)果:b'X&O&BAaYbY^zo^sJ1MHP4DyTD1a9qF8eQWQAcroutIsaFo6rSo'b'Kf^t\rmibGeVRHEGfeyZ$I$SkH2MQpe^e4fDnU&EXlJQof0NhhfyGJRLMGavQ\r\nnBjQg\r\rx3XNUfRMNcR3c9NUNsKVHcII742kjYJ'代碼解釋:(1)以字節(jié)模式打開文件withopen('d:/test.txt','rb')asf:#使用'rb'以字節(jié)模式打開文件使用open()函數(shù)以二進(jìn)制讀模式("rb")打開文件d:/test.txt。使用with語句確保文件在操作完成后自動關(guān)閉。(2)讀取前50個字節(jié)a=f.read(50)使用f.read(50)從文件中讀取前50個字節(jié)的內(nèi)容,并將其存儲在變量a中。(3)文件指針移動到最后100個字節(jié)的位置f.seek(0,2)#移動到文件末尾file_size=f.tell()#獲取文件大小使用f.seek(0,2)將文件指針移動到文件末尾。2表示從文件末尾開始計算。使用f.tell()獲取當(dāng)前文件指針的位置,即文件的總大小。(4)根據(jù)文件大小調(diào)整指針位置iffile_size<100:f.seek(0)#如果文件小于100字節(jié),則從文件開頭讀取else:f.seek(-100,2)#否則移動到倒數(shù)100字節(jié)如果文件大小小于100字節(jié),將文件指針移動到文件開頭。如果文件大小大于或等于100字節(jié),使用f.seek(-100,2)將文件指針移動到倒數(shù)100個字節(jié)的位置。(5)讀取最后100個字節(jié)b=f.read(100)使用f.read(100)從當(dāng)前文件指針位置讀取最多100個字節(jié)的內(nèi)容,并將其存儲在變量b中。(6)輸出讀取的內(nèi)容print(a)print(b)打印變量a和b的內(nèi)容。例5-12逐行輸出文件的所有字符本例將編寫程序,逐行輸出test.txt文件的所有字符。有多種方法可以實(shí)現(xiàn)逐行輸出文件內(nèi)容,例如使用readlines()方法生成一個列表,或者直接迭代文件對象。本例將給出4種實(shí)現(xiàn)方法。方法1:f=open('d:/test.txt','r')a_list=f.readlines()#讀取所有行并生成列表forxina_list:print(x)f.close()方法2:f=open('d:/test.txt','r')forxinf:print(x)#直接打印每一行f.close()方法3:f=open('d:/test.txt','r')forxinf.xreadlines():#在Python3.x中使用xreadlines()print(x)f.close()方法4:f=open('d:/test.txt','r')whileTrue:line=f.readline()#逐行讀取ifnotline:#如果沒有更多行,退出循環(huán)breakelse:print(line)f.close()例5-13復(fù)制文件中的文本數(shù)據(jù)本例將復(fù)制test.txt文件中的文本數(shù)據(jù)。要復(fù)制文本文件的內(nèi)容,可以以讀模式打開源文件,將所有字符讀取到一個變量中,然后以寫模式新建一個文件,將內(nèi)容寫入該文件。另一種方法是逐行或逐字節(jié)地讀取源文件并寫入新文件。f=open('d:/test.txt','r')#以讀模式打開源文件g=open('d:/test_1.txt','w')#以寫模式新建目標(biāo)文件a=f.read()#讀取源文件的所有內(nèi)容g.write(a)#將內(nèi)容寫入目標(biāo)文件f.close()#關(guān)閉源文件g.close()#關(guān)閉目標(biāo)文件代碼解釋:(1)以讀模式打開源文件f=open('d:/test.txt','r')使用open()函數(shù)以讀模式("r")打開文件d:/test.txt,并將文件對象存儲在變量f中。如果文件不存在,會拋出FileNotFoundError。(2)以寫模式新建目標(biāo)文件g=open('d:/test_1.txt','w')使用open()函數(shù)以寫模式("w")打開文件d:/test_1.txt,并將文件對象存儲在變量g中。如果目標(biāo)文件已存在,其內(nèi)容將被清空;如果文件不存在,則會創(chuàng)建一個新文件。(3)讀取源文件的所有內(nèi)容a=f.read()使用f.read()方法讀取源文件f的全部內(nèi)容,并將結(jié)果存儲在變量a中。read()方法會讀取文件中的所有字符,直到文件末尾。(4)將內(nèi)容寫入目標(biāo)文件g.write(a)使用g.write(a)方法將變量a中的內(nèi)容寫入目標(biāo)文件g。(5)關(guān)閉源文件和目標(biāo)文件f.close()g.close()使用close()方法關(guān)閉源文件f和目標(biāo)文件g,確保所有寫入操作完成并釋放系統(tǒng)資源。例5-14統(tǒng)計test.txt文件中的信息本例將統(tǒng)計test.txt文件中大寫字母、小寫字母和數(shù)字出現(xiàn)的頻率。可以使用字符串對象的內(nèi)置方法isupper()、islower()和isdigit()來判斷字符的類別。另一種方法是直接檢查字符是否在大寫字母、小寫字母和數(shù)字的對應(yīng)范圍內(nèi)。f=open('d:/test.txt','r')#以讀模式打開文件u,i,d=0,0,0#初始化大寫字母、小寫字母和數(shù)字計數(shù)器whileTrue:a=f.read(1)#逐個字符讀取文件ifnota:#如果沒有更多字符,退出循環(huán)breakifa.isupper():#判斷是否為大寫字母u+=1elifa.islower():#判斷是否為小寫字母i+=1elifa.isdigit():#判斷是否為數(shù)字d+=1f.close()#關(guān)閉文件print('大寫字母有%d個,小寫字母有%d個,數(shù)字有%d個'%(u,i,d))輸出結(jié)果:大寫字母有3712個,小寫字母有3798個,數(shù)字有1504個代碼解釋:(1)以讀模式打開文件f=open('d:/test.txt','r')使用open()函數(shù)以讀模式("r")打開文件d:/test.txt,并將文件對象存儲在變量f中。(2)初始化計數(shù)器u,i,d=0,0,0初始化三個變量u、i和d,分別用于統(tǒng)計大寫字母、小寫字母和數(shù)字字符的數(shù)量。(3)逐個字符讀取文件并統(tǒng)計whileTrue:a=f.read(1)#逐個字符讀取文件ifnota:#如果沒有更多字符,退出循環(huán)breakifa.isupper():#判斷是否為大寫字母u+=1elifa.islower():#判斷是否為小寫字母i+=1elifa.isdigit():#判斷是否為數(shù)字d+=1使用whileTrue創(chuàng)建一個無限循環(huán),用于逐個字符讀取文件。每次調(diào)用f.read(1)從文件中讀取一個字符,并將結(jié)果存儲在變量a中。如果a為空字符串(即""),表示已經(jīng)到達(dá)文件末尾,使用break退出循環(huán)。使用isupper()、islower()和isdigit()方法分別判斷字符是否為大寫字母、小寫字母和數(shù)字,并相應(yīng)地增加計數(shù)器。(4)關(guān)閉文件f.close()使用close()方法關(guān)閉文件,確保所有讀取操作完成并釋放系統(tǒng)資源。(5)打印統(tǒng)計結(jié)果print('大寫字母有%d個,小寫字母有%d個,數(shù)字有%d個'%(u,i,d))使用格式化字符串打印統(tǒng)計結(jié)果。例5-15將小寫字母轉(zhuǎn)換為大寫字母本例將test.txt文首先,以寫模式創(chuàng)建一個空文本文件test_copy.txt,然后以讀模式打開文本文件test.txt。接著,創(chuàng)建一個字符串變量temp用于保存轉(zhuǎn)換后的字符串。與例5-14類似,判斷字符是否屬于小寫字母,如果是,則使用字符串對象的upper()方法轉(zhuǎn)換為大寫字母。f=open('d:/test.txt','r')#以讀模式打開原始文件g=open('d:/test_copy.txt','w')#以寫模式創(chuàng)建新文件temp=''#temp用于保存新文件的字符串whileTrue:a=f.read(1)#逐個字符讀取文件ifnota:#如果沒有更多字符,退出循環(huán)breakifa.islower():#如果是小寫字母b=a.upper()#轉(zhuǎn)換為大寫字母temp+=b#附加到tempelse:temp+=a#如果不是小寫字母,直接附加到tempg.write(temp)#將轉(zhuǎn)換后的內(nèi)容寫入新文件f.close()#關(guān)閉原始文件g.close()#關(guān)閉新文件輸入結(jié)果:HELLO,WORLD!THISISATESTFILE.代碼解釋:(1)以讀模式打開原始文件f=open('d:/test.txt','r')使用open()函數(shù)以讀模式("r")打開文件d:/test.txt,并將文件對象存儲在變量f中。(2)以寫模式創(chuàng)建新文件g=open('d:/test_copy.txt','w')使用open()函數(shù)以寫模式("w")打開文件d:/test_copy.txt,并將文件對象存儲在變量g中。如果文件已存在,其內(nèi)容將被清空;如果文件不存在,則會創(chuàng)建一個新文件。(3)初始化臨時字符串temp=''初始化一個空字符串temp,用于存儲轉(zhuǎn)換后的內(nèi)容。(4)逐個字符讀取文件并處理whileTrue:a=f.read(1)#逐個字符讀取文件ifnota:#如果沒有更多字符,退出循環(huán)breakifa.islower():#如果是小寫字母b=a.upper()#轉(zhuǎn)換為大寫字母temp+=b#附加到tempelse:temp+=a#如果不是小寫字母,直接附加到temp使用whileTrue創(chuàng)建一個無限循環(huán),用于逐個字符讀取文件。每次調(diào)用f.read(1)從文件中讀取一個字符,并將結(jié)果存儲在變量a中。如果a為空字符串(即""),表示已經(jīng)到達(dá)文件末尾,使用break退出循環(huán)。使用islower()方法判斷字符是否為小寫字母:①如果是小寫字母,使用upper()方法將其轉(zhuǎn)換為大寫字母,并將結(jié)果存儲在變量b中,然后將b附加到temp。②如果不是小寫字母,直接將a附加到temp。(5)將轉(zhuǎn)換后的內(nèi)容寫入新文件g.write(temp)使用g.write(temp)方法將轉(zhuǎn)換后的內(nèi)容寫入新文件g。(6)關(guān)閉原始文件和新文件f.close()g.close()使用close()方法關(guān)閉原始文件f和新文件g,確保所有寫入操作完成并釋放系統(tǒng)資源。例5-16批量更改文件名本例程序的功能是對指定目錄下的所有文件(包括子目錄中的文件)進(jìn)行處理,將所有符合特定后綴的文件按照指定的命名方式進(jìn)行重命名。#-*-coding:UTF-8-*-importosimporttime#批量文件重命名defbatch_rename(path):globalimg_numifnotos.path.isdir(path)andnotos.path.isfile(path):returnFalseifos.path.isfile(path):#分割出目錄與文件名file_path=os.path.split(path)#分割出文件名與文件擴(kuò)展名lists=file_path[1].split('.')#檢查文件是否有擴(kuò)展名iflen(lists)<2:return#沒有擴(kuò)展名,直接返回#取出后綴名,轉(zhuǎn)換為小寫file_ext=lists[-1].lower()img_ext=['bmp','jpeg','gif','psd','png','jpg']#如果文件后綴在指定的后綴列表中,則進(jìn)行重命名iffile_extinimg_ext:new_name=os.path.join(file_path[0],lists[0]+'_cn.'+file_ext)ifnotos.path.exists(new_name):#檢查目標(biāo)文件是否存在os.rename(path,new_name)img_num+=1elifos.path.isdir(path):#遍歷子目錄,遞歸調(diào)用foriteminos.listdir(path):batch_rename(os.path.join(path,item))if__name__==
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年漆包線項(xiàng)目資金籌措計劃書代可行性研究報告
- 葛洲壩集團(tuán)投資管理辦法
- 虹口區(qū)倉庫庫存管理辦法
- 融資性擔(dān)保公司管理辦法
- 衡陽電動車管理辦法規(guī)定
- 街道無主小區(qū)管理辦法
- 裝配車間易耗品管理辦法
- 西安無病例小區(qū)管理辦法
- 計劃外資金審批管理辦法
- 證監(jiān)會內(nèi)部信息管理辦法
- 建筑工程模板施工工藝技術(shù)要點(diǎn)講義豐富課件
- 永能選煤廠生產(chǎn)安全事故應(yīng)急救援預(yù)案
- 浙江省建設(shè)領(lǐng)域簡易勞動合同(A4版本)
- 位置度公差以及其計算
- 城市規(guī)劃原理課件(完整版)
- 氯化銨危險化學(xué)品安全周知卡
- 浙江省本級公務(wù)車輛租賃服務(wù)驗(yàn)收單(格式)
- 糖代謝紊亂的實(shí)驗(yàn)診斷
- 國家電網(wǎng)有限公司十八項(xiàng)電網(wǎng)重大反事故措施(修訂版)
- 李墨林按摩療法(李墨林)237頁
- GB∕T 12703.1-2021 紡織品 靜電性能試驗(yàn)方法 第1部分:電暈充電法
評論
0/150
提交評論