版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Python3基礎(chǔ)教程第3版慕課版單元7文件和數(shù)據(jù)組織任務(wù)7-1:從文件中讀取唐詩目錄【任務(wù)目標(biāo)】文件中按下面的格式保存了若干首唐詩?!洞簳浴纷髡撸好虾迫淮好卟挥X曉,處處聞啼鳥。夜來風(fēng)雨聲,花落知多少?!帉懸粋€(gè)程序,從文件中讀取唐詩目錄,程序運(yùn)行結(jié)果如下。1、春曉
第1行2、靜夜思
第5行3、登鸛雀樓
第9行4、怨情
第13行……【任務(wù)實(shí)施】演示過程……7.1文件基本操作本節(jié)主要內(nèi)容:文件類型打開和關(guān)閉文件讀寫文本文件讀寫二進(jìn)制文件用文件存儲(chǔ)對(duì)象目錄操作7.1.1文件類型通常,文件可分為文本文件和二進(jìn)制文件。文本文件指以字符編碼方式保存的文件,字符編碼由字符集定義,常見字符集有ASCII、ANSI、UTF-8、GB2312、Unicode等。一個(gè)文本文件只能保存其所用字符集包含的字符。Python通常按字符讀取文本文件中的字符,一個(gè)字符占用的字節(jié)數(shù)由字符集定義。二進(jìn)制文件指以二進(jìn)制位0和位1方式保存的文件。二進(jìn)制文件不需要規(guī)定字符集。二進(jìn)制文件通常用于保存圖像、音頻和視頻等數(shù)據(jù)。圖像、音頻和視頻有不同的編碼格式,如圖像的png格式、音頻的mp3格式、視頻的mp4格式等。Python通常按字節(jié)讀取二進(jìn)制文件中的數(shù)據(jù)。Python可按文本文件格式或二進(jìn)制文件格式讀寫文件中的數(shù)據(jù)。按文本文件格式讀取文件數(shù)據(jù),示例代碼如下。>>>file=open('data.txt','rt') #打開文件>>>print(file.readline()) #從文件讀一行數(shù)據(jù),輸出Python3基礎(chǔ)教程>>>file.close() #關(guān)閉文件按文本文件格式讀取數(shù)據(jù)時(shí),Python會(huì)根據(jù)字符編碼將數(shù)據(jù)解碼為字符串,將數(shù)據(jù)轉(zhuǎn)換為有意義的字符。按二進(jìn)制文件格式讀取文件數(shù)據(jù),示例代碼如下。>>>file=open('data.txt','rb')>>>print(file.readline())b'Python3\xbb\xf9\xb4\xa1\xbd\xcc\xb3\xcc'>>>file.close()按二進(jìn)制文件格式讀取數(shù)據(jù)時(shí),數(shù)據(jù)為字節(jié)流,Python不執(zhí)行解碼操作,讀取的數(shù)據(jù)作為bytes字符串,并按bytes字符串格式輸出。7.1.2打開和關(guān)閉文件可用Python內(nèi)置的open()函數(shù)來打開文件,并返回關(guān)聯(lián)的文件對(duì)象。open()函數(shù)基本格式為如下。myfile=open(filename[,mode])其中:myfile為引用文件對(duì)象的變量filename為文件名字符串mode為文件讀寫模式。在文件名中可包含相對(duì)或絕對(duì)路徑,省略路徑時(shí),Python在當(dāng)前工作目錄中搜索文件。IDLE的當(dāng)前工作目錄為Python安裝目錄。在系統(tǒng)命令提示符窗口中執(zhí)行python.exe進(jìn)入交互環(huán)境或執(zhí)行Python程序時(shí),當(dāng)前目錄為Python的當(dāng)前工作目錄。文件讀寫模式r:只讀模式,默認(rèn)值。w:只寫模式,創(chuàng)建新文件。若文件已存在,則原來的文件被覆蓋。a:只寫、追加模式。若文件存在,在文件末尾添加數(shù)據(jù)。文件不存在時(shí)會(huì)創(chuàng)建新文件。x:只寫模式,創(chuàng)建新文件。若文件已存在,則報(bào)錯(cuò)。t:按文本格式讀寫文件數(shù)據(jù),默認(rèn)方式。b:按二進(jìn)制格式讀寫文件數(shù)據(jù)。+:組合讀寫模式,同時(shí)進(jìn)行讀、寫操作。“t”b”和“r”“w”“a”“x”可組合使用,“+”必須和“r”“w”“a”組合使用。常用文件讀寫模式組合省略讀寫模式:只能按文本格式從文件讀取數(shù)據(jù),等同于“rt”。例如,open('data.txt')。rb:只能按二進(jìn)制格式從文件讀取數(shù)據(jù)。例如,open('data.txt','rb')。w和wt:只能按文本格式向文件寫入數(shù)據(jù)。例如,open('data.txt','w')。r+:可按文本格式從文件讀取數(shù)據(jù),或向文件寫入數(shù)據(jù)。例如,open('data.txt','r+')。wb:只能按二進(jìn)制格式向文件寫入數(shù)據(jù)。例如,open('data.txt','wb')。常用文件讀寫模式組合rb+:可按二進(jìn)制格式從文件讀取數(shù)據(jù),或向文件寫入數(shù)據(jù)。例如,open('data.txt','rb+')。a+:可按文本格式從文件讀取數(shù)據(jù),或向文件寫入數(shù)據(jù),寫入的數(shù)據(jù)始終添加到文件末尾。例如,open('data.txt','a+')。ab+:可按二進(jìn)制格式從文件讀取數(shù)據(jù),或向文件寫入數(shù)據(jù),寫入的數(shù)據(jù)始終添加到文件末尾。例如,open('data.txt','ab+')。文件指針打開文件后,Python用一個(gè)文件指針記錄當(dāng)前讀寫位置。以“w”或“a”模式打開文件時(shí),文件指針指向文件末尾以“r”模式打開文件時(shí),文件指針指向文件開頭。Python始終在文件指針的位置讀寫數(shù)據(jù),讀取或?qū)懭胍粋€(gè)數(shù)據(jù)后,根據(jù)數(shù)據(jù)長(zhǎng)度,向后移動(dòng)文件指針。close()方法close()方法用于關(guān)閉文件,示例代碼如下。myfile.close() #關(guān)閉文件通常,Python會(huì)使用內(nèi)存緩沖區(qū)緩存文件數(shù)據(jù)。關(guān)閉文件時(shí),Python將緩沖的數(shù)據(jù)寫入文件,然后關(guān)閉文件,釋放對(duì)文件的引用。程序結(jié)束時(shí),Python可自動(dòng)關(guān)閉未使用的文件。flush()方法可將緩沖區(qū)的內(nèi)容寫入文件,但不關(guān)閉文件,示例代碼如下。myfile.flush()7.1.3讀寫文本文件文本文件有關(guān)的讀寫方法如下:read():將從文件指針位置開始到文件末尾的內(nèi)容作為一個(gè)字符串返回。read(n):將從文件指針位置開始的n個(gè)字符作為一個(gè)字符串返回。readline():將從文件指針位置開始到下一個(gè)換行符號(hào)的內(nèi)容作為一個(gè)字符串返回,讀取內(nèi)容包含換行符號(hào)。readlines():將從文件指針位置開始到文件末尾的內(nèi)容作為一個(gè)列表返回,每一行的字符串作為一個(gè)列表元素。7.1.3讀寫文本文件write(xstring):在文件指針位置寫入字符串,返回寫入的字符個(gè)數(shù)。writelines(xlist):將列表中的數(shù)據(jù)合并為一個(gè)字符串寫入到文件指針位置,返回寫入的字符個(gè)數(shù)。。seek(n):將文件指針移動(dòng)到第n個(gè)字節(jié),0表示指向文件開頭。tell():返回文件指針當(dāng)前位置。文本文件按字符讀取數(shù)據(jù),如果文件包含Unicode字符,Python會(huì)自動(dòng)進(jìn)行轉(zhuǎn)換。文本文件中每行末尾以回車換行符號(hào)結(jié)束在讀取的字符串中,Python用“\n”代替回車換行符號(hào)。二進(jìn)制文件讀取的回車換行符號(hào)為“\r\n”。文本文件code.txt的數(shù)據(jù)如下one第一行two第二行three第三行1.以“r”模式打開文件讀數(shù)據(jù)以“r”模式打開文件時(shí),文件指針位于文件開頭,只能從文件讀取數(shù)據(jù),示例代碼如下。>>>myfile=open(r'd:\code.txt') #以默認(rèn)只讀方式打開文件>>>x=myfile.read() #讀文件全部?jī)?nèi)容到字符串>>>x #每行末尾的換行符號(hào)在字符串中為“\n”'one第一行\(zhòng)ntwo第二行\(zhòng)nthree第三行'>>>print(x) #打印格式與原文件完全一致one第一行two第二行three第三行>>>myfile.read() #文件指針已指向文件末尾,返回空字符串''>>>myfile.seek(0) #將文件指針移動(dòng)到文件開頭0>>>myfile.read(5) #讀5個(gè)字符'one第一'>>>myfile.tell() #返回文件指針的當(dāng)前位置7>>>myfile.readline() #讀取從文件指針當(dāng)前位置到當(dāng)前行末尾的字符串'行\(zhòng)n'>>>myfile.readline() #讀下一行'two第二行\(zhòng)n'>>>myfile.seek(0)0>>>myfile.readlines() #讀文件全部?jī)?nèi)容到列表['one第一行\(zhòng)n','two第二行\(zhòng)n','three第三行']>>>myfile.seek(0)0>>>forxinmyfile:print(x) #以迭代方式讀文件…one第一行 #請(qǐng)思考兩行數(shù)據(jù)之間為什么有一個(gè)空行?two第二行
three第三行>>>myfile.close() #關(guān)閉文件2.以“r+”模式打開文件以“r+”模式打開文件時(shí),文件操作具有下列特點(diǎn)??蓮奈募x取數(shù)據(jù),也可向文件寫入數(shù)據(jù)。剛打開文件時(shí),文件指針指向文件開頭。在執(zhí)行讀操作后執(zhí)行寫操作時(shí),不管文件指針位置在哪里,都將數(shù)據(jù)寫入文件末尾。要在特定位置寫入數(shù)據(jù),需要先執(zhí)行seek()函數(shù)指定文件指針位置,然后寫入數(shù)據(jù)。>>>myfile=open(r'd:\code.txt','r+')>>>myfile.write('oneline') #寫入字符串,此時(shí)寫入到文件開頭,覆蓋原數(shù)據(jù)7>>>myfile.seek(0) #定位文件指針到文件開頭0>>>myfile.read() #讀取全部數(shù)據(jù)'oneline行\(zhòng)ntwo第二行\(zhòng)nthree第三行'>>>myfile.seek(7) #將文件指針指向第8個(gè)字節(jié)(位置為7)7>>>myfile.write('123456') #寫入數(shù)據(jù),會(huì)覆蓋原第一行末尾的換行符號(hào)6>>>myfile.seek(0) #定位文件指針到文件開頭0>>>myfile.read() #讀取數(shù)據(jù),查看前面寫入的數(shù)據(jù)'oneline123456o第二行\(zhòng)nthree第三行'>>>myfile.seek(0) #定位文件指針到文件開頭0>>>myfile.read(5) #讀取5個(gè)字符'oneli'>>>myfile.tell() #查看文件指針位置5>>>myfile.write('xxx') #寫入數(shù)據(jù),讀取數(shù)據(jù)后立即寫入,數(shù)據(jù)寫入文件末尾3>>>myfile.seek(0) #定位文件指針到文件開頭0>>>myfile.read() #讀取數(shù)據(jù),查看前面寫入的數(shù)據(jù),“xxx”在文件末尾'oneline123456o第二行\(zhòng)nthree第三行xxx'>>>myfile.close() #關(guān)閉文件3.以“w”模式打開文件以“w”模式打開文件時(shí),會(huì)創(chuàng)建一個(gè)新文件。如果存在同名文件,原來的文件會(huì)被覆蓋。所以,使用“w”模式打開文件時(shí)應(yīng)特別小心。以“w”模式打開文件時(shí),只能向文件寫入數(shù)據(jù)。>>>myfile=open(r'd:\code2.txt','w') >>>myfile.write('one\n') #將字符串寫入文件4>>>myfile.writelines(['1','2','abc']) #將列表寫入文件,列表對(duì)象必須都是字符串>>>myfile.close() #關(guān)閉文件>>>myfile=open(r'd:\code2.txt') #重新打開文件,讀取前面寫入的數(shù)據(jù)>>>myfile.read()'one\n12abc'>>>myfile.close() #關(guān)閉文件在向文本文件寫入需要換行的數(shù)據(jù)時(shí),應(yīng)在字符串末尾嵌入“\n”,否則數(shù)據(jù)不會(huì)換行。4.以“w+”模式打開文件以“w+”模式打開文件時(shí),允許同時(shí)讀寫文件>>>myfile=open(r'd:\code2.txt','w+') >>>myfile.read() #新建文件,所以其中沒有數(shù)據(jù),返回空字符串''>>>myfile.write('one\n') #將字符串寫入文件4>>>myfile.writelines([1,2,'abc'])>>>myfile.seek(0) #將文件指針移動(dòng)到文件開頭0>>>myfile.readline() #讀第1行'one\n'>>>myfile.readline() #讀第2行'12abc'>>>myfile.readline() #已經(jīng)到文件末尾,返回空字符串''>>>myfile.seek(4) #將文件指針移動(dòng)到第4個(gè)字節(jié)之后4>>>myfile.write('xxxxxxx') #將字符串寫入文件7>>>myfile.seek(0) #將文件指針移動(dòng)到文件開頭0>>>myfile.read() #讀取全部數(shù)據(jù)'one\nxxxxxxx'>>>myfile.close() #關(guān)閉文件5.以“a”模式打開文件以“a”模式打開文件時(shí),只能向文件寫入數(shù)據(jù),文件打開時(shí)文件指針指向文件末尾,向文件寫入的數(shù)據(jù)始終添加到文件末尾。>>>myfile=open(r'd:\code2.txt','a') >>>myfile.write('\n123456') #將字符串寫入文件7>>>myfile.seek(4)4>>>myfile.write('*****') #雖然文件指針指向第5個(gè)字符,但仍寫入文件末尾5>>>myfile=open(r'd:\code2.txt') #重新以只讀方式打開文件>>>print(myfile.read()) #查看讀取的數(shù)據(jù)onexxxxxxx123456*****6.以a+”模式打開文件“a+”與“a”模式的唯一區(qū)別是前者除了允許寫入數(shù)據(jù),還可以讀取文件數(shù)據(jù)>>>myfile=open(r'd:\code2.txt','a+') >>>myfile.tell() #查看文件指針位置,此時(shí)應(yīng)為文件末尾25>>>myfile.write('\n新添加的數(shù)據(jù)') #將字符串寫入文件7>>>myfile.seek(0) #將文件指針移動(dòng)到文件開頭0>>>print(myfile.read()) #打印讀取的文件內(nèi)容onexxxxxxx123456*****新添加的數(shù)據(jù)>>>myfile.seek(5) #將文件指針移動(dòng)第5個(gè)字符之后5>>>myfile.write('newdata') #將字符串寫入文件7>>>myfile.seek(0) #將文件指針移動(dòng)到文件開頭0>>>print(myfile.read()) #打印讀取的數(shù)據(jù),查看前面寫入的“newdata”的位置onexxxxxxx123456新添加的數(shù)據(jù)newdata >>>myfile.close() #關(guān)閉文件7.1.4讀寫二進(jìn)制文件上一節(jié)中講述的文本文件的各種讀寫方法均可用于二進(jìn)制文件,區(qū)別在于:二進(jìn)制文件讀寫的是bytes字符串。例如,下面的代碼先以“wb”模式創(chuàng)建一個(gè)二進(jìn)制文件,然后分別用“r”和“rb”模式打開文件,讀取文件內(nèi)容。>>>myfile=open(r'd:\code3.txt','wb') #創(chuàng)建二進(jìn)制文件>>>myfile.write('aaaaa') #出錯(cuò),二進(jìn)制文件只能寫入bytes字符串Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:abytes-likeobjectisrequired,not'str'>>>myfile.write(b'aaaaa') #正確,將bytes字符串寫入文件5>>>myfile.write(b'\nbbbb')5>>>myfile.close() >>>myfile=open(r'd:\code3.txt','r') >>>print(myfile.read()) #打印讀取文件的全部?jī)?nèi)容aaaaabbbb>>>myfile=open(r'd:\code3.txt','rb') >>>print(myfile.read()) #打印讀取文件的全部?jī)?nèi)容b'aaaaa\nbbbb'>>>myfile.close() #關(guān)閉文件7.1.5用文件存儲(chǔ)對(duì)象用文本文件或二進(jìn)制文件格式直接存儲(chǔ)Python中的各種對(duì)象,通常需要進(jìn)行繁瑣的轉(zhuǎn)換??梢允褂肞ython標(biāo)準(zhǔn)模塊pickle處理文件中對(duì)象的讀寫>>>x=[1,2,'abc'] #創(chuàng)建列表對(duì)象>>>y={'name':'John','age':25} #創(chuàng)建字典對(duì)象>>>myfile=open(r'd:\objdata.bin','wb') >>>importpickle #導(dǎo)入pickle模塊>>>pickle.dump(x,myfile) #將列表對(duì)象寫入文件>>>pickle.dump(y,myfile) #將字典對(duì)象寫入文件>>>myfile.close() #關(guān)閉文件>>>myfile=open(r'e:\pytemp\objdata.bin','rb')>>>myfile.read() #直接讀取文件中的全部?jī)?nèi)容,查看內(nèi)容b'\x80\x03]q\x00(K\x01K\x02X\x03\x00\x00\x00abcq\x01e.\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x19X\x04\x00\x00\x00nameq\x02X\x04\x00\x00\x00Johnq\x03u.’>>>myfile.seek(0) #將文件指針移動(dòng)到文件開頭0>>>x=pickle.load(myfile) #從文件讀取對(duì)象>>>x[1,2,'abc']>>>x=pickle.load(myfile) #從文件讀取對(duì)象>>>x{'age':25,'name':'John'}7.1.6目錄操作文件操作通常都會(huì)涉及到目錄操作。目錄是一種特殊的文件,它存儲(chǔ)當(dāng)前目錄中的子目錄和文件的相關(guān)信息。Python的os模塊提供了目錄操作函數(shù),使用之前應(yīng)先導(dǎo)入模塊,示例代碼如下。importos1.os.getcwd()該方法返回Python的當(dāng)前工作目錄,示例代碼如下。>>>os.getcwd()'D:\\pytemp'2.os.mkdir()該方法用于創(chuàng)建子目錄,示例代碼如下。>>>os.mkdir('temp') #在當(dāng)前目錄中創(chuàng)建子目錄>>>os.mkdir('d:\ptem\test') #在絕對(duì)路徑d:\ptem中創(chuàng)建子目錄test3.os.rmdir()該方法用于刪除指定的空子目錄,示例代碼如下。>>>os.rmdir('temp') #刪除當(dāng)前目錄的子目錄>>>os.rmdir('d:\ptem\test') #刪除絕對(duì)路徑中的子目錄testos.rmdir()只能刪除空的子目錄,刪除非空子目錄時(shí)會(huì)出錯(cuò),示例代碼如下。>>>os.rmdir('pycode')Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>OSError:[WinError145]目錄不是空的。:'pycode'4.os.listdir()該方法返回目錄包含的子目錄和文件名稱,示例代碼如下。>>>os.listdir() #列出當(dāng)前目錄內(nèi)容['code2.txt','pycode','temp']>>>os.listdir('d:\ptem') #列出指定目錄內(nèi)容['test','test.py']5.os.chdir()該方法用于改變當(dāng)前目錄,示例代碼如下。>>>os.getcwd() #查看當(dāng)前目錄'D:\\pytemp'>>>os.mkdir('tem') #在當(dāng)前目錄中創(chuàng)建子目錄>>>os.chdir('tem') #切換當(dāng)前目錄>>>os.getcwd() #查看新的當(dāng)前目錄'D:\\pytemp\\tem'>>>os.chdir('d:\ptem') #用絕對(duì)路徑指定要切換的目錄>>>os.getcwd()'d:\\ptem'>>>os.chdir('c:/’) #切換到其他磁盤的目錄>>>os.getcwd()'c:\\'6.os.rename()該方法用于修改文件的名稱,示例代碼如下。>>>os.rename(r'd:\ptem\test.py','d:\ptem\code.py')7.os.remove()該方法用于刪除指定的文件,示例代碼如下。>>>os.remove('d:\ptem\code.py')任務(wù)7-2:讀取CSV文件中的專業(yè)信息【任務(wù)目標(biāo)】在CSV文件中保存了如下專業(yè)信息。專業(yè)名稱,層次,科類工程造價(jià),高起專,文科工商企業(yè)管理,高起專,文科建筑工程技術(shù),高起專,理科編寫一個(gè)程序,從文件中讀取專業(yè)信息,程序運(yùn)行結(jié)果如下。專業(yè)名稱
層次
科類工程造價(jià)
高起專
文科工商企業(yè)管理
高起專
文科建筑工程技術(shù)
高起專
理科【任務(wù)實(shí)施】演示過程……7.2CSV文件操作CSV指Comma-SeparatedValues,即逗號(hào)分隔值。CSV文件也是文本文件,其存儲(chǔ)使用特定分隔符分隔的數(shù)據(jù)。分隔符可以是逗號(hào)、空格、制表符、其他字符或字符串。例如,下面的數(shù)據(jù)是典型的CSV文件數(shù)據(jù)。專業(yè)名稱,層次,科類工程造價(jià),高起專,文科工商企業(yè)管理,高起專,文科建筑工程技術(shù),高起專,理科可用Windows記事本創(chuàng)建該文件,存儲(chǔ)數(shù)據(jù)時(shí)使用“ANSI”編碼格式,以便Python程序正確讀取其中的漢字。CSV文件通常由多條記錄組成,第1行通常為記錄的各個(gè)字段名稱,從第2行開始為記錄數(shù)據(jù)。每條記錄包含相同的字段,字段之間用分隔符分隔。可以使用open()函數(shù)打開CSV文件,按文本文件格式讀寫CSV文件數(shù)據(jù)。采用這種格式讀取時(shí)需要將讀取的每行字符串轉(zhuǎn)換成字段數(shù)據(jù),寫入時(shí)需要添加分隔符。7.2.1讀CSV文件數(shù)據(jù)csv模塊提供了兩種讀取器對(duì)象來讀取CSV文件數(shù)據(jù):常規(guī)讀取器和字典讀取器。1.使用常規(guī)讀取器csv模塊中的reader()函數(shù)用于創(chuàng)建常規(guī)讀取器對(duì)象,其基本格式如下。
csvreader=csv.reader(csvfile,delimiter='分隔符')其中:變量csvreader用于引用讀取器對(duì)象;csvfile是open()函數(shù)返回的文件對(duì)象;delimiter參數(shù)指定CSV文件使用的數(shù)據(jù)分隔符,默認(rèn)為逗號(hào)。常規(guī)讀取器對(duì)象是一個(gè)可迭代對(duì)象,每次迭代返回一個(gè)包含一行數(shù)據(jù)的列表,列表元素對(duì)應(yīng)CSV記錄的各個(gè)字段。可用for循環(huán)或next()函數(shù)迭代常規(guī)讀取器對(duì)象。>>>importcsv>>>csvfile=open(r'd:\招生專業(yè).csv',encoding='utf-8')>>>csvreader=csv.reader(csvfile) #創(chuàng)建讀取器對(duì)象>>>forrowincsvreader: #用循環(huán)迭代讀取CSV文件...print(row) #輸出包含CSV文件數(shù)據(jù)行的列表...>>>csvfile.seek(0) #將文件指針移動(dòng)到文件開頭0>>>next(csvreader) #使用next()函數(shù)迭代讀取CSV文件['專業(yè)名稱','層次','科類']>>>next(csvreader)['工程造價(jià)','高起專','文科']>>>next(csvreader)['工商企業(yè)管理','高起專','文科']>>>csvfile.close() #關(guān)閉文件2.使用字典讀取器csv模塊中的DictReader()函數(shù)用于創(chuàng)建字典讀取器對(duì)象,其基本格式如下。
csvreader=csv.DictReader(csvfile)其中:變量csvreader用于引用讀取器對(duì)象csvfile是open()函數(shù)返回的文件對(duì)象。字典讀取器對(duì)象是一個(gè)可迭代對(duì)象,每次迭代返回一個(gè)包含一行數(shù)據(jù)的排序字典對(duì)象(OrderedDict,即排好序的字典對(duì)象)。字典讀取器對(duì)象默認(rèn)將CSV文件的第1行作為字段名稱,將字段名稱作為字典中的“鍵”。CSV文件中第2行開始的每行數(shù)據(jù)按順序作為“鍵”映射的“值”??捎胒or循環(huán)或next()函數(shù)迭代字典讀取器對(duì)象。>>>importcsv>>>csvfile=open(r'd:\招生專業(yè).csv',encoding='utf-8')>>>csvreader=csv.DictReader(csvfile) #創(chuàng)建讀取器對(duì)象>>>forrowincsvreader: #用循環(huán)迭代讀取CSV文件...print(row) #輸出包含CSV文件數(shù)據(jù)行的字典對(duì)象...>>>csvfile.seek(0)0>>>forrowincsvreader: #用“鍵”索引輸出數(shù)據(jù)
...print(row['專業(yè)名稱'],row['層次'],row['科類'],sep='\t')...>>>csvfile.seek(0)0>>>next(csvreader)#用next()函數(shù)迭代OrderedDict([('專業(yè)名稱','專業(yè)名稱'),('層次','層次'),('科類','科類')])>>>next(csvreader)OrderedDict([('專業(yè)名稱','工程造價(jià)'),('層次','高起專'),('科類','文科')])>>>row=next(csvreader)>>>print(row['專業(yè)名稱'],row['層次'],row['科類'])工商企業(yè)管理高起專文科>>>csvfile.close()7.2.2將數(shù)據(jù)寫入CSV文件1.用常規(guī)寫對(duì)象寫數(shù)據(jù)常規(guī)寫對(duì)象由csv.writer()函數(shù)創(chuàng)建,其基本格式如下。
csvwriter=csv.writer(csvfile)其中:變量csvwriter用于引用寫對(duì)象,csvfile是open()函數(shù)返回的文件對(duì)象。寫對(duì)象的writerow()方法用于向CSV文件寫入一行數(shù)據(jù),其基本格式如下。
csvwriter.writerow(data)其中,data是一個(gè)列表對(duì)象,包含一行CSV數(shù)據(jù)。將數(shù)據(jù)寫入CSV后,writerow()方法會(huì)在每行數(shù)據(jù)末尾添加兩個(gè)換行符號(hào)。>>>importcsv>>>csvfile=open('d:/csvdata2.txt','w') #打開文件>>>csvwriter=csv.writer(csvfile) #創(chuàng)建常規(guī)寫對(duì)象>>>csvwriter.writerow(['xm','sex','age']) #寫入字段標(biāo)題12>>>csvwriter.writerow(['張三','男','25']) #寫入數(shù)據(jù)行9>>>csvwriter.writerow(['韓梅梅','女','18']) #寫入數(shù)據(jù)行10>>>csvfile.close() #關(guān)閉文件>>>csvfile=open('d:/csvdata2.txt') #以只讀模式打開文件>>>csvfile.read() #讀取全部數(shù)據(jù),注意每行末尾有兩個(gè)換行符號(hào)'xm,sex,age\n\n張三,男,25\n\n韓梅梅,女,18\n\n'>>>csvfile.seek(0) 0>>>print(csvfile.read())#打印文件數(shù)據(jù),因?yàn)槊啃心┪灿袃蓚€(gè)換行符號(hào),所以有空行出現(xiàn)xm,sex,age
張三,男,25
韓梅梅,女,182.用字典寫對(duì)象向CSV文件寫入數(shù)據(jù)字典寫對(duì)象由csv.DictWriter()函數(shù)創(chuàng)建,其基本格式如下。
csvwriter=csv.DictWriter(csvfile,fieldnames=字段名列表)其中:變量csvwriter用于引用寫對(duì)象csvfile是open()函數(shù)返回的文件對(duì)象。參數(shù)fieldnames用列表指定字段名,它決定將字典寫入CSV文件時(shí),“鍵:值”對(duì)中的各個(gè)值的寫入順序。字典寫對(duì)象的writerow()方法用于向CSV文件寫入一行數(shù)據(jù),其基本格式如下。
csvwriter.writerow(data)其中,data是一個(gè)字典對(duì)象,包含一行CSV數(shù)據(jù)。>>>importcsv>>>csvfile=open('d:/csvdata2.txt','w') #打開文件>>>csvwriter=csv.DictWriter(csvfile,fieldnames=['xm','sex','age']) #創(chuàng)建字典寫對(duì)象>>>csvwriter.writeheader() #寫入字段名>>>csvwriter.writerow({'xm':'韓梅梅','sex':'女','age':'18'}) #寫數(shù)據(jù)10>>>csvwriter.writerow({'xm':'Mike','sex':'male','age':'20'}) #寫數(shù)據(jù)14>>>csvfile.close()>>>csvfile=open('d:/csvdata2.txt') #以只讀模式打開文件>>>csvfile.read() #讀取數(shù)據(jù)進(jìn)行查看'xm,sex,age\n\n韓梅梅,女,18\n\nMike,male,20\n\n'任務(wù)7-3:超級(jí)計(jì)算機(jī)排序【任務(wù)目標(biāo)】全球超級(jí)計(jì)算機(jī)排行榜2023年6月榜單中排名前10的超級(jí)計(jì)算機(jī)信息如表7-1所示。編寫程序,按峰值運(yùn)算速度從高到低的順序輸出表7-1中的超級(jí)計(jì)算機(jī)信息?!救蝿?wù)實(shí)施】演示過程……7.3數(shù)據(jù)組織的維度本節(jié)主要內(nèi)容:基本概念一維數(shù)據(jù)的處理二維數(shù)據(jù)的處理數(shù)據(jù)排序數(shù)據(jù)查找7.3.1基本概念計(jì)算機(jī)在處理數(shù)據(jù)時(shí),總是按一定的格式來組織數(shù)據(jù)。數(shù)據(jù)的組織格式表明數(shù)據(jù)之間的基本關(guān)系和邏輯,進(jìn)而形成“數(shù)據(jù)組織的維度”。根據(jù)組織格式的不同,可將數(shù)據(jù)分為一維數(shù)據(jù)、二維數(shù)據(jù)和高維(或多維)數(shù)據(jù)。1.一維數(shù)據(jù)一維數(shù)據(jù)由具有對(duì)等關(guān)系的有序或無序的數(shù)據(jù)組成,采用線性方式組織。數(shù)學(xué)中的集合和數(shù)組就是典型的一維數(shù)據(jù)。例如,下面的一組專業(yè)名稱就屬于一維數(shù)據(jù)。
計(jì)算機(jī)應(yīng)用,工程造價(jià),會(huì)計(jì)學(xué),影視動(dòng)畫2.二維數(shù)據(jù)二維數(shù)據(jù)也稱為表格數(shù)據(jù),由具有關(guān)聯(lián)關(guān)系的數(shù)據(jù)組成,采用二維表格組織數(shù)據(jù)。數(shù)學(xué)中的矩陣、二維表格都屬于二維數(shù)據(jù)。例如,下面的成績(jī)表是一組二維數(shù)據(jù)。3.高維數(shù)據(jù)維度超過二維的數(shù)據(jù)都稱為高維數(shù)據(jù)。例如,成績(jī)表加上學(xué)期,表示學(xué)生每學(xué)期的各科成績(jī),則構(gòu)成三維數(shù)據(jù)。再加上學(xué)校信息,表示多個(gè)學(xué)校的學(xué)生在每個(gè)學(xué)期的各科成績(jī),則構(gòu)成四維數(shù)據(jù)。高維數(shù)據(jù)在Web系統(tǒng)中十分常見,例如,XML、JSON、HTML等格式均可用于表示高維數(shù)據(jù)。高維數(shù)據(jù)通常使用JSON字符串表示,可以多層嵌套。高維數(shù)據(jù)示例下面的JSON字符串是兩個(gè)學(xué)期的學(xué)生課程成績(jī)數(shù)據(jù)。{ "第一學(xué)期":[ {"姓名":"小明","語文":80,"數(shù)學(xué)":85,"物理":90},
{"姓名":"韓梅梅","語文":97,"數(shù)學(xué)":87,"物理"90:},
{"姓名":"李雷","語文":88,"數(shù)學(xué)":90,"物理":70}], "第二學(xué)期":[ {"姓名":"小明","語文":89,"數(shù)學(xué)":78,"物理":97},
{"姓名":"韓梅梅","語文":77,"數(shù)學(xué)":88,"物理":89},
{"姓名":"李雷","語文":97,"數(shù)學(xué)":76,"物理":88}],}7.3.2一維數(shù)據(jù)的處理一維數(shù)據(jù)是簡(jiǎn)單的線性結(jié)構(gòu),在Python中可用列表表示,示例代碼如下。>>>專業(yè)=['計(jì)算機(jī)應(yīng)用','工程造價(jià)','會(huì)計(jì)學(xué)','影視動(dòng)畫']>>>print(專業(yè))['計(jì)算機(jī)應(yīng)用','工程造價(jià)','會(huì)計(jì)學(xué)','影視動(dòng)畫']>>>專業(yè)[0]'計(jì)算機(jī)應(yīng)用'一維數(shù)據(jù)可用文本文件進(jìn)行存儲(chǔ),文件可使用空格、逗號(hào)、分號(hào)等作為數(shù)據(jù)的分隔符,示例代碼如下。計(jì)算機(jī)應(yīng)用工程造價(jià)會(huì)計(jì)學(xué)影視動(dòng)畫計(jì)算機(jī)應(yīng)用,工程造價(jià),會(huì)計(jì)學(xué),影視動(dòng)畫計(jì)算機(jī)應(yīng)用;工程造價(jià);會(huì)計(jì)學(xué);影視動(dòng)畫在將一維數(shù)據(jù)寫入文件時(shí),除了寫入數(shù)據(jù)之外,還需要額外寫入分隔符。在從文件讀取數(shù)據(jù)時(shí),需使用分隔符來分解字符串>>>file=open(r'd:\data1.txt','w') #打開文本文件>>>專業(yè)=['計(jì)算機(jī)應(yīng)用','工程造價(jià)','會(huì)計(jì)學(xué)','影視動(dòng)畫'] #用列表表示一維數(shù)據(jù)>>>forninrange(len(專業(yè))-1): #將最后一個(gè)數(shù)據(jù)之前的數(shù)據(jù)寫入文件...file.write(專業(yè)[n]) #寫入數(shù)據(jù)...file.write('') #寫入分隔符...>>>file.write(專業(yè)[n+1]) #寫入最后一個(gè)數(shù)據(jù)4>>>file=open(r'd:\data1.txt') #重新打開文件>>>print(file.read()) #輸出從文件讀取的數(shù)據(jù)計(jì)算機(jī)應(yīng)用工程造價(jià)會(huì)計(jì)學(xué)影視動(dòng)畫>>>file.seek(0)0>>>zy=file.read() #將文件數(shù)據(jù)讀出,存入字符串>>>zy'計(jì)算機(jī)應(yīng)用工程造價(jià)會(huì)計(jì)學(xué)影視動(dòng)畫'>>>data=zy.split('') #將字符串解析為列表,還原數(shù)據(jù)>>>data['計(jì)算機(jī)應(yīng)用','工程造價(jià)','會(huì)計(jì)學(xué)','影視動(dòng)畫']7.3.3二維數(shù)據(jù)的處理二維數(shù)據(jù)可看作是嵌套的一維數(shù)據(jù),即一維數(shù)據(jù)的每個(gè)數(shù)據(jù)項(xiàng)為一組一維數(shù)據(jù)??捎昧斜韥肀硎径S數(shù)據(jù),示例代碼如下。>>>scores=[['姓名','語文','數(shù)學(xué)','物理'],['小明',80,85,90],['韓梅梅',97,87,90],['李雷',88,90,70]]可使用CSV文件存儲(chǔ)二維數(shù)據(jù),從文件讀取二維數(shù)據(jù)時(shí),應(yīng)注意文件末尾的換行符的處理>>>scores=[['姓名','語文','數(shù)學(xué)','物理'],...['小明',80,85,90],...['韓梅梅',97,87,90],...['李雷',88,90,70]]>>>
>>>importcsv>>>file=open(r'd:\scores_data.txt','w+') #打開存儲(chǔ)二維數(shù)據(jù)的文件>>>writer=csv.writer(file) #創(chuàng)建CSV文件寫對(duì)象>>>forrowinscores:...writer.writerow(row) #將二維數(shù)據(jù)中的一行寫入文件...>>>file.seek(0)0>>>print(file.read()) #輸出從文件讀取的數(shù)據(jù)姓名,語文,數(shù)學(xué),物理
小明,80,85,90
韓梅梅,97,87,90
李雷,88,90,70
>>>data=[] #創(chuàng)建空列表,用于存儲(chǔ)從文件讀取的二維數(shù)據(jù)>>>file.seek(0) #將文件指針移動(dòng)到文件開頭0>>>reader=csv.reader(csvfile)>>>forrowinreader:...iflen(row)>0: ...data.append(row) #將非空行中的數(shù)據(jù)加入列表...>>>data #查看還原的二維數(shù)據(jù)[['姓名','語文','數(shù)學(xué)','物理'],['小明','80','85','90'],['韓梅梅','97','87','90'],['李雷','88','90','70']]>>>forrowindata:...print('%8s\t%s\t%s\t%s'%(row[0],row[1],row[2],row[3]))#數(shù)據(jù)格式化輸出...7.3.4數(shù)據(jù)排序常見的排序方法:選擇排序、冒泡排序和插入排序。Python列表的sort()方法和內(nèi)置的sorted()函數(shù)均可用于排序本節(jié)從算法的角度講解各種常見的排序方法。1.選擇排序選擇排序的基本原理:將n個(gè)數(shù)按從小到大排序。首先從n個(gè)數(shù)中選出最小的數(shù),將其與第1個(gè)數(shù)據(jù)交換;然后對(duì)剩余的n-1個(gè)數(shù)采用同樣的處理方法經(jīng)過n-1輪完成排序。2.冒泡排序冒泡排序的基本原理:將n個(gè)數(shù)按從小到大排序。首先,依次比較相鄰的兩個(gè)數(shù),如果后面的數(shù)更小,則交換兩個(gè)數(shù)的位置,經(jīng)過這樣一輪處理,最大的數(shù)據(jù)到了最后;然后對(duì)剩余的前n-1個(gè)數(shù)采用同樣的處理方法經(jīng)過n-1輪完成排序。3.插入排序插入排序的基本原理:對(duì)n個(gè)數(shù)按從小到大排序。將第1個(gè)數(shù)放入新列表,然后依次將剩余的n-1個(gè)數(shù)插入新列表。每次在新列表中插入數(shù)據(jù)時(shí),先查找應(yīng)插入的位置,然后再插入數(shù),保證新列表中的數(shù)始終按從小到大的順序排列。7.3.5數(shù)據(jù)查找1.順序查找基本原理:在線性表中按順序查找指定元素。2.二分法查找基本原理:二分法查找適用于有序的線性表。假設(shè)線性表data中第一個(gè)元素的位置為start,最后一個(gè)元素的位置為end,在其中查找x。查找的基本步驟如下。(1)計(jì)算mid=(start+end)/2,取整數(shù)。(2)如果x等于data[mid],則找到x,結(jié)束查找。(3)如果x小于data[mid],令end=mid-1。如果end<start,表示線性表不包含x,結(jié)束查找,否則返回(1)。(4)如果x大于data[mid],令start=mid+1。如果end<start,表示線性表不包含x,結(jié)束查找,否則返回(1)。綜合實(shí)例:登錄密碼驗(yàn)證創(chuàng)建一個(gè)Python程序,將用戶的id和密碼以字典對(duì)象的格式存入文件,然后從文件讀取數(shù)據(jù),驗(yàn)證輸入的id和密碼是否正確。Python3基礎(chǔ)教程第3版慕課版單元8Python標(biāo)準(zhǔn)庫任務(wù)8-1:繪制五角星【任務(wù)目標(biāo)】使用turtle庫繪制圖8-1所示的五角星?!救蝿?wù)實(shí)施】演示過程……8.1繪圖工具:turtle庫本節(jié)主要內(nèi)容:窗體函數(shù)畫筆控制函數(shù)畫筆運(yùn)動(dòng)函數(shù)形狀函數(shù)輸入輸出函數(shù)事件處理相關(guān)函數(shù)turtle庫(也稱海龜繪圖庫)提供了基本繪圖功能,它起源于1969年誕生的Logo語言。turtle庫提供了簡(jiǎn)單、直觀的繪圖方法,Python接納了turtle庫,并將其作為標(biāo)準(zhǔn)庫提供給用戶。turtle庫的文件為turtle.py,其位于Python安裝目錄下的“Lib”子目錄中。繪圖之前,應(yīng)導(dǎo)入turtle模塊。例如:fromturtleimport*turtle庫也稱海龜繪圖庫,提供幾何繪圖功能,它最早在Logo語言中實(shí)現(xiàn)。因?yàn)楹?jiǎn)單、易用,Python將其作為標(biāo)準(zhǔn)庫提供給用戶。turtle庫在繪圖窗口中完成繪圖,繪圖窗口的坐標(biāo)系如圖8-2所示。默認(rèn)情況下,繪圖窗口的中心為坐標(biāo)原點(diǎn),x軸正方向?yàn)榍斑M(jìn)方向(即畫筆的朝向),x軸負(fù)方向?yàn)楹笸朔较?;畫筆的朝向的左側(cè)為左側(cè)方向,右側(cè)為右側(cè)方向。turtle庫通過移動(dòng)畫筆完成繪圖。turtle庫提供面向過程和面向?qū)ο髢煞N接口。面向過程接口提供可直接調(diào)用的函數(shù),面向?qū)ο蠼涌诒緯蛔鼋榻B。turtle庫的面向過程接口提供的函數(shù)主要包括窗體函數(shù)、畫筆控制函數(shù)、畫筆運(yùn)動(dòng)函數(shù)、形狀函數(shù)、輸入輸出函數(shù)以及事件處理函數(shù)等。所有函數(shù)的第一個(gè)參數(shù)默認(rèn)為self,本書在介紹各個(gè)函數(shù)時(shí)均省略了該參數(shù)。8.1.1窗體函數(shù)1.turtle.bye()關(guān)閉繪圖窗口,示例代碼如下。turtle.bye()2.turtle.exitonclick()單擊時(shí)關(guān)閉繪圖窗口,示例代碼如下。turtle.exitonclick()3.turtle.setup(width,height,startx,starty)設(shè)置繪圖主窗口的大小和位置。各參數(shù)作用如下。width:整數(shù)表示窗口寬度為多少像素;浮點(diǎn)數(shù)表示窗口寬度占屏幕的百分比(默認(rèn)50%)。height:整數(shù)表示窗口高度為多少像素;浮點(diǎn)數(shù)表示窗口高度占屏幕的百分比(默認(rèn)75%)。startx:正數(shù)表示窗口位置距離屏幕左邊緣多少像素,負(fù)數(shù)表示距離屏幕右邊緣的像素?cái)?shù),None(默認(rèn)值)表示窗口水平居中。starty:正數(shù)表示窗口位置距離屏幕上邊緣多少像素,負(fù)數(shù)表示距離屏幕下邊緣的像素?cái)?shù),None(默認(rèn)值)表示窗口垂直居中。示例代碼如下。>>>turtle.setup(200,180,0,0) #窗口大小200*180,位置在屏幕左上角>>>turtle.setup(0.5,0.6) #窗口寬為屏幕50%,高為屏幕60%,位置在屏幕中央4.turtle.screensize(canvwidth,canvheight,bg)設(shè)置繪圖窗口中畫布的大小,無參數(shù)時(shí)返回畫布大小。各參數(shù)的作用如下。canvwidth:正整型數(shù),以像素表示畫布的新寬度值。canvheight:正整型數(shù),以像素表示畫面的新高度值。bg:顏色字符串,新的背景顏色。示例代碼如下。>>>turtle.screensize(300,400)>>>turtle.screensize()(300,400)turtle庫中使用的顏色有3種表示方法。顏色名稱字符串:red、blue、yellow等。十六進(jìn)制顏色值字符串:#FF0000、#00FF00、#FFFF00等。RGB顏色元組:顏色元組格式為(r,g,b),r、g、b的取值范圍為0~colormode。colormode為顏色模式,取值為1或255。turtle.colormode(n)函數(shù)設(shè)置顏色模式(n取值1或255)。例如:顏色模式為255:(255,0,0)、(0,210,0)、(155,215,0)等是有效的顏色元組顏色模式為1時(shí):(1,0,0)、(0,0.3,0)、(1,0.5,0)等是有效的顏色元組。示例代碼如下。>>>turtle.screensize(300,400,'yellow')5.turtle.bgcolor(*args)設(shè)置背景顏色,無參數(shù)時(shí)返回當(dāng)前背景顏色。參數(shù)args是一個(gè)顏色字符串或顏色元組,或者是3個(gè)取值范圍為0~colormode內(nèi)的數(shù)值(即省略圓括號(hào)的顏色元組)。示例代碼如下。>>>turtle.bgcolor((0.5,0,0))>>>turtle.bgcolor()(0.5019607843137255,0.0,0.0)>>>turtle.bgcolor('red')>>>turtle.bgcolor()'red'>>>turtle.bgcolor(0.6,0.3,0.7)6.turtle.bgpic(picname=None)設(shè)置背景圖片或返回當(dāng)前背景圖片名稱。如果picname為一個(gè)以gif或png為后綴名的圖片文件名,則將相應(yīng)圖片設(shè)為背景。如果picname為“nopic”,則刪除當(dāng)前背景圖片。未提供參數(shù)時(shí)返回當(dāng)前背景圖片文件名。示例代碼如下。>>>turtle.bgpic()'nopic'>>>turtle.bgpic('back.png')7.turtle.clear()和turtle.clearscreen()從繪圖窗口中刪除全部繪圖,將繪圖窗口重置為初始狀態(tài):白色背景無背景圖片無事件綁定并啟用追蹤。示例代碼如下。>>>turtle.clear()>>>turtle.clearscreen()8.turtle.reset()和turtle.resetscreen()將繪圖窗口中的畫筆重置為初始狀態(tài),示例代碼如下。>>>turtle.reset()>>>turtle.resetscreen()9.turtle.window_height()和turtle.window_width()返回繪圖窗口的高度和高度,示例代碼如下。>>>turtle.window_height() 576>>>turtle.window_width()6838.1.2畫筆控制函數(shù)1.turtle.pendown()、turtle.pd()和turtle.down()畫筆落下,移動(dòng)畫筆時(shí)畫線,示例代碼如下。>>>turtle.pendown()2.turtle.penup()、turtle.pu()和turtle.up()畫筆抬起,移動(dòng)畫筆時(shí)不畫線,示例代碼如下。>>>turtle.penup()3.turtle.pensize(width=None)和turtle.width(width=None)參數(shù)with為一個(gè)正數(shù)。提供參數(shù)with時(shí),將其設(shè)置為畫筆大小,畫筆大小決定線條粗細(xì)。如未指定參數(shù),則返回畫筆的當(dāng)前大小。示例代碼如下。>>>turtle.pensize()1>>>turtle.pensize(5)4.turtle.pen(pen=None,**pendict)提供參數(shù)時(shí)設(shè)置畫筆屬性;未指定參數(shù)時(shí)返回畫筆屬性。參數(shù)pen為字典。pendict為一個(gè)或多個(gè)關(guān)鍵字參數(shù),可用的關(guān)鍵字及其取值如下。shown:值為True(顯示畫筆形狀)或False(不顯示畫筆形狀)。pendown:值為True(畫筆落下)或False(畫筆抬起)。pencolor:值為顏色字符串或顏色元組,用于設(shè)置畫筆顏色。fillcolor:值為顏色字符串或顏色元組,用于設(shè)置填充顏色。pensize:值為正數(shù),用于設(shè)置畫筆大小。speed:值為0~10范圍內(nèi)的數(shù),用于設(shè)置繪圖速度。resizemode:值為“auto”“user”或“noresize”,用于設(shè)置繪圖窗口大小調(diào)整模式。stretchfactor:值為“(正數(shù)值,正數(shù)值)”格式的元組,用于設(shè)置畫筆裁剪比例。outline:值為正數(shù),用于設(shè)置輪廓寬度。tilt:值為整數(shù)或小數(shù),用于設(shè)置畫筆傾斜角度。示例代碼如下。>>>turtle.pen(fillcolor="yellow",pensize=5) #設(shè)置關(guān)鍵字參數(shù)>>>turtle.pen({'shown':False,'tilt':15}) #使用字典參數(shù)>>>turtle.pen(){'pencolor':'black','shown':False,'speed':3,'pendown':True,'shearfactor':0.0,'resizemode':'noresize','outline':1,'stretchfactor':(1.0,1.0),'tilt':15,'pensize':5,'fillcolor':'yellow'}5.turtle.isdown()畫筆落下時(shí)返回True,畫筆抬起時(shí)返回False,示例代碼如下。>>>turtle.penup()>>>turtle.isdown()False>>>turtle.pendown()>>>turtle.isdown()True6.turtle.pencolor(*args)提供參數(shù)時(shí)設(shè)置畫筆顏色,未提供參數(shù)時(shí)返回畫筆顏色,示例代碼如下。>>>colormode()1.0>>>turtle.pencolor()'red'>>>turtle.pencolor("blue")>>>turtle.pencolor()'blue'>>>turtle.pencolor((0.3,0.5,0.6))>>>turtle.pencolor('#FF00FF')7.turtle.fillcolor(*args)提供參數(shù)時(shí)設(shè)置填充顏色未提供參數(shù)時(shí)返回填充顏色示例代碼如下。>>>turtle.fillcolor("yellow")>>>turtle.fillcolor()'yellow'8.turtle.color(*args)提供兩個(gè)顏色參數(shù),分別設(shè)置為畫筆顏色和填充顏色;未提供參數(shù)時(shí)返回畫筆顏色和填充顏色。示例代碼如下。>>>turtle.color()('black','yellow')>>>turtle.color("red","green")9.turtle.filling()返回填充狀態(tài),要填充是返回True,不填充時(shí)返回False。10.turtle.begin_fill()開始填充,在繪制填充形狀之前調(diào)用。11.turtle.end_fill()結(jié)束填充,同時(shí)執(zhí)行填充操作,填充調(diào)用begin_fill()之后繪制的封閉形狀。12.turtle.clone()創(chuàng)建并返回畫筆的克隆體,克隆體具有與畫筆相同的位置、朝向和其他屬性??寺〉玫降漠嫻P可以設(shè)置與原畫筆不同的屬性,執(zhí)行不同的繪圖操作。示例代碼如下。>>>t2=turtle.clone()turtle允許使用多個(gè)畫筆,可調(diào)用Turtle()函數(shù)創(chuàng)建畫筆,示例代碼如下。>>>t3=turtle.Turtle()8.1.3畫筆運(yùn)動(dòng)函數(shù)8.1.3畫筆運(yùn)動(dòng)函數(shù)1.turtle.forward(distance)和turtle.fd(distance)畫筆前進(jìn)distance指定的距離,參數(shù)distance為像素值,不改變畫筆的朝向,示例代碼如下。>>>turtle.forward(50)2.turtle.back(distance)、turtle.bk(distance)和turtle.backward(distance)畫筆后退distance指定的距離,不改變畫筆的朝向,示例代碼如下。>>>turtle.backward(50)3.turtle.right(angle)和turtle.rt(angle)畫筆向右旋轉(zhuǎn)angle個(gè)單位,單位默認(rèn)為角度,可調(diào)用turtle.degrees()和turtle.radians()函數(shù)設(shè)置度量單位。角度的正負(fù)由畫筆模式確定,可調(diào)用turtle.mode()函數(shù)設(shè)置畫筆模式。函數(shù)turtle.degrees()將角度的度量單位設(shè)置為度,turtle.radians()將角度的度量單位設(shè)置為弧度。示例代碼如下。>>>turtle.degrees() #設(shè)置角度單位為度>>>turtle.heading() #畫筆當(dāng)前朝向0.0>>>turtle.right(60) #畫筆向右旋轉(zhuǎn)60度>>>turtle.heading()300.04.turtle.mode(mode=None)設(shè)置或返回畫筆模式(即畫布的坐標(biāo)系)參數(shù)mode為字符串“standard”“l(fā)ogo”或“world”。“standard”模式與舊版本的turtle兼容,“l(fā)ogo”模式與大部分Logo畫筆繪圖兼容,“world”模式使用用戶自定義的“世界坐標(biāo)系”。模式、畫筆初始朝向和角度正負(fù)之間的關(guān)系如下。standard模式:畫筆初始朝右(東)、逆時(shí)針為角度正方向。logo模式:畫筆初始朝上(北)、順時(shí)針為角度正方向。示例代碼如下。>>>turtle.mode('logo')>>>turtle.heading()0.0>>>turtle.right(60)>>>turtle.heading()60.05.turtle.left(angle)和turtle.lt(angle)畫筆向左旋轉(zhuǎn)angle個(gè)單位,示例代碼如下。>>>turtle.left(45)6.turtle.goto(x,y=None)、turtle.setpos(x,y=None)和turtle.setposition(x,y=None)將畫筆移動(dòng)到絕對(duì)坐標(biāo)的位置。如果畫筆已落下將畫直線。不改變畫筆的朝向。同時(shí)提供參數(shù)x和y時(shí),(x,y)為新坐標(biāo)。省略參數(shù)y時(shí),x為坐標(biāo)向量。示例代碼如下。>>>turtle.pos() #查看畫筆當(dāng)前位置(0.00,0.00)>>>turtle.goto(20,30) #移動(dòng)畫筆到(20,30)>>>turtle.pos()(20.00,30.00)>>>turtle.goto((50,50)) #移動(dòng)畫筆到(50,50)7.turtle.setx(x)畫筆水平移動(dòng),橫坐標(biāo)變?yōu)閤,縱坐標(biāo)保持不變,示例代碼如下。>>>turtle.pos()(50.00,50.00)>>>turtle.setx(100)>>>turtle.pos()(100.00,50.00)8.turtle.sety(y)畫筆垂直移動(dòng),橫坐標(biāo)不變,縱坐標(biāo)變?yōu)閥,示例代碼如下。>>>turtle.pos()(100.00,50.00)>>>turtle.sety(100)>>>turtle.pos()(100.00,100.00)9.turtle.setheading(to_angle)和turtle.seth(to_angle)將畫筆的方向設(shè)置為to_angle(注意由畫筆模式?jīng)Q定具體方向)示例代碼如下。>>>turtle.setheading(45)10.turtle.home()將畫筆移至初始坐標(biāo)(0,0),并設(shè)置方向?yàn)槌跏挤较?由畫筆模式確定),示例代碼如下。>>>turtle.pos() #當(dāng)前位置(100.00,100.00)>>>turtle.heading() #當(dāng)前朝向15.0>>>turtle.home() #畫筆回歸原點(diǎn),重置為初始朝向>>>turtle.heading()0.0>>>turtle.pos()(0.00,0.00)11.turtle.circle(radius,extent=None,steps=None)繪制一個(gè)半徑為radius的圓,圓心在畫筆左側(cè)radius個(gè)單位的位置。參數(shù)radius為數(shù)值,extent為數(shù)值或None,steps為整數(shù)或None。extent為一個(gè)角度,省略時(shí)繪制圓,指定extent參數(shù)時(shí)繪制指定角度的圓弧。繪制圓弧時(shí),如果radius為正值,則沿逆時(shí)針方向繪制圓弧,否則沿順時(shí)針方向繪制圓弧。最終畫筆的朝向由extent的值決定。turtle庫實(shí)際上是用內(nèi)切正多邊形來近似表示圓,其邊的數(shù)量由steps指定。省略steps參數(shù)時(shí)自動(dòng)確定邊數(shù)。此方法也可用來繪制正多邊形。示例代碼如下。>>>turtle.circle(50) #繪制半徑為50的圓>>>turtle.circle(100,180) #繪制半徑為100的半圓>>>turtle.circle(200,None,4) #繪制對(duì)角線長(zhǎng)度為200的正方形>>>turtle.circle(200,steps=6) #繪制對(duì)角線長(zhǎng)度為200的正六邊形12.turtle.dot(size=None,*color)繪制一個(gè)直徑為size,顏色為color的圓點(diǎn)。如果未指定size,則直徑取pensize+4和2*pensize中的較大值,示例代碼如下。>>>turtle.dot() #繪制默認(rèn)大小的點(diǎn)。>>>turtle.dot(100) #繪制直徑為100的點(diǎn)>>>turtle.dot(50,'red') #繪制直徑為50的點(diǎn),顏色為紅色13.turtle.stamp()在畫筆當(dāng)前位置印制一個(gè)印章(畫筆形狀),返回該印章的stamp_id,示例代碼如下。>>>turtle.stamp()1914.turtle.clearstamp(stampid)刪除stampid指定的印章,stampid是調(diào)用stamp()的返回值,示例代碼如下。>>>turtle.clearstamp(19)15.turtle.clearstamps(n=None)參數(shù)n為整數(shù)或None。n為None則刪除全部印章,n>0則刪除前n個(gè)印章,n<0則刪除后n個(gè)印章,示例代碼如下。>>>turtle.clearstamps(5)16.turtle.undo()撤消最近的一個(gè)畫筆動(dòng)作,可撤消的次數(shù)由撤消緩沖區(qū)的大小決定,示例代碼如下。>>>turtle.undo()17.turtle.speed(speed=None)設(shè)置畫筆的移動(dòng)速度。不指定參數(shù)(或?yàn)镹one)時(shí)返回畫筆的移動(dòng)速度。參數(shù)speed為0~10范圍內(nèi)的整數(shù)或速度字符串,除0以外的速度值越大繪圖速度越快(0表示沒有動(dòng)畫效果)??捎玫乃俣茸址c速度值的對(duì)應(yīng)關(guān)系如下。fastest:0,最快。fast:10,快。normal:6,正常。slow:3,慢。slowest:1,最慢。示例代碼如下。>>>turtle.speed()3>>>turtle.speed('fast')>>>turtle.speed()10>>>turtle.speed(6)18.turtle.position()和turtle.pos()返回畫筆當(dāng)前的坐標(biāo),示例代碼如下。>>>turtle.pos()(100.00,100.00)19.turtle.xcor()返回畫筆的x坐標(biāo)。20.turtle.ycor()返回畫筆的y坐標(biāo)。21.turtle.heading()返回畫筆的當(dāng)前朝向。22.turtle.distance(x,y=None)返回從畫筆位置到坐標(biāo)(x,y)或另一畫筆對(duì)應(yīng)位置的距離。參數(shù)x為畫筆對(duì)象時(shí),y為None示例代碼如下。>>>turtle.home()>>>turtle.goto(100,100)>>>turtle.distance(0,0)141.42135623730958.1.4形狀函數(shù)1.turtle.getshapes()返回畫筆形狀列表,列表包含當(dāng)前可用的所有畫筆形狀的名稱,示例代碼如下。>>>turtle.getshapes()['arrow','blank','circle','classic','square','triangle','turtle']2.turtle.shape(name=None)將畫筆形狀設(shè)置為name指定的形狀,如未提供參數(shù)則返回當(dāng)前的畫筆形狀的名稱,示例代碼如下。>>>turtle.shape('turtle') #將畫筆設(shè)置為海龜形狀3.turtle.begin_poly()開始記錄多邊形的頂點(diǎn),當(dāng)前畫筆位置為多邊形的第一個(gè)頂點(diǎn)。4.turtle.end_poly()停止記錄多邊形的頂點(diǎn),當(dāng)前畫筆位置為多邊形的最后一個(gè)頂點(diǎn),它將連線到第一個(gè)頂點(diǎn)。5.turtle.get_poly()返回最新記錄的多邊形,示例代碼如下。>>>turtle.begin_poly() #開始記錄>>>turtle.fd(50)>>>turtle.lt(60)>>>turtle.fd(50)>>>turtle.lt(60)>>>turtle.fd(50)>>>turtle.lt(60)>>>turtle.fd(50)>>>turtle.lt(60)>>>turtle.fd(50)>>>turtle.end_poly() #結(jié)束記錄正六邊形>>>p=turtle.get_poly() #返回剛記錄的多邊形>>>p((0.00,0.00),(50.00,0.00),(75.00,43.30),(50.00,86.60),(0.00,86.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 塑造獨(dú)特定制新我
- 旅游行業(yè)創(chuàng)新驅(qū)動(dòng)
- 2落花生說課稿-2024-2025學(xué)年五年級(jí)上冊(cè)語文統(tǒng)編版
- 外聘勞務(wù)合同(2篇)
- 培訓(xùn)機(jī)構(gòu)受單位委托培訓(xùn)合同(2篇)
- 大宗礦產(chǎn)品銷售代理合同(2篇)
- 2024版二手房買賣協(xié)議(含裝修情況)2篇
- 2024氣體購銷合同范本
- 專業(yè)油罐儲(chǔ)存服務(wù)協(xié)議模板(2024年)版
- 物業(yè)管理裝修協(xié)議書
- 寺廟祈?;顒?dòng)方案(共6篇)
- 2024年化學(xué)螺栓錨固劑項(xiàng)目可行性研究報(bào)告
- 企業(yè)財(cái)務(wù)三年戰(zhàn)略規(guī)劃
- 提高膿毒性休克患者1h集束化措施落實(shí)率
- 山東省濟(jì)南市天橋區(qū)2024-2025學(xué)年八年級(jí)數(shù)學(xué)上學(xué)期期中考試試題
- 主播mcn合同模板
- 2024年人教版八年級(jí)語文上冊(cè)期末考試卷(附答案)
- 2024測(cè)繪個(gè)人年終工作總結(jié)
- 遼寧省大連市2023-2024學(xué)年高三上學(xué)期雙基測(cè)試(期末考試) 物理 含解析
- 勞務(wù)分包的工程施工組織設(shè)計(jì)方案
- DB11 637-2015 房屋結(jié)構(gòu)綜合安全性鑒定標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論