《Python語(yǔ)言程序設(shè)計(jì)》課件 第10-12章 圖形用戶(hù)界面程序設(shè)計(jì)、文件操作、Python語(yǔ)言與大數(shù)據(jù)挖掘_第1頁(yè)
《Python語(yǔ)言程序設(shè)計(jì)》課件 第10-12章 圖形用戶(hù)界面程序設(shè)計(jì)、文件操作、Python語(yǔ)言與大數(shù)據(jù)挖掘_第2頁(yè)
《Python語(yǔ)言程序設(shè)計(jì)》課件 第10-12章 圖形用戶(hù)界面程序設(shè)計(jì)、文件操作、Python語(yǔ)言與大數(shù)據(jù)挖掘_第3頁(yè)
《Python語(yǔ)言程序設(shè)計(jì)》課件 第10-12章 圖形用戶(hù)界面程序設(shè)計(jì)、文件操作、Python語(yǔ)言與大數(shù)據(jù)挖掘_第4頁(yè)
《Python語(yǔ)言程序設(shè)計(jì)》課件 第10-12章 圖形用戶(hù)界面程序設(shè)計(jì)、文件操作、Python語(yǔ)言與大數(shù)據(jù)挖掘_第5頁(yè)
已閱讀5頁(yè),還剩87頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第10章圖形用戶(hù)界面程序設(shè)計(jì)10.1GUI編程1.窗口與組件在進(jìn)行GUI開(kāi)發(fā)時(shí),首先需要?jiǎng)?chuàng)建一個(gè)頂層窗口。該窗口充當(dāng)容器的角色,可以存放程序所需的各種組件,例如按鈕、下拉框、單選框等。頂層窗口包含了所有的組件,而組件本身也可以作為容器使用,包含其他組件。包含其他組件的組件被稱(chēng)為父組件,而被包含在其中的組件則被稱(chēng)為子組件。2.事件驅(qū)動(dòng)與回調(diào)機(jī)制事件:用戶(hù)使用GUI程序進(jìn)行的操作,如移動(dòng)鼠標(biāo)、點(diǎn)擊鼠標(biāo)、按下鍵盤(pán)上的按鍵等。回調(diào)機(jī)制:當(dāng)某個(gè)事件發(fā)生時(shí),程序?qū)⒄{(diào)用對(duì)應(yīng)的事件處理函數(shù)并做出相應(yīng)的響應(yīng)。事件對(duì)應(yīng)的處理函數(shù)被稱(chēng)為回調(diào)函數(shù)。10.2Tkinter的主要組件使用Tkinter庫(kù)創(chuàng)建一個(gè)GUI程序只需要以下步驟:(1)導(dǎo)入Tkinter模塊。(2)創(chuàng)建GUI應(yīng)用程序的主窗口(頂層窗口)。(3)添加完成程序功能所需要的組件。(4)編寫(xiě)回調(diào)函數(shù)。(5)進(jìn)入主事件循環(huán),對(duì)用戶(hù)觸發(fā)的事件做出響應(yīng)。10.2.1標(biāo)簽標(biāo)簽(Label)是用來(lái)顯示圖片和文本的組件。在top主窗口中創(chuàng)建標(biāo)簽:label=Label(top,text=屬性值)text屬性:設(shè)置顯示的文本例10-1在標(biāo)簽內(nèi)顯示兩行文字fromtkinterimport*top=Tk()top.title(u"主窗口")label=Label(top,text="HelloWorld,\nfromTkinter")label.pack()top.mainloop()10.2.2框架框架(Frame)是其他組件的一個(gè)容器,通常是用來(lái)包含一組控件的主體。frame=Frame(top,屬性1=表達(dá)式1,屬性2=表達(dá)式2….)例10-2fromtkinterimport*top=Tk()top.title(u"主窗口")forrelief_settingin["raised","flat","groove","ridge","solid","sunken"]:frame=Frame(top,borderwidth=2,relief=relief_setting)Label(frame,text=relief_setting,width=10).pack()frame.pack(side=LEFT,padx=5,pady=5)top.mainloop()10.2.3按鈕在主窗口w中創(chuàng)建了一個(gè)按鈕控件:btn=Button(w,text="Quit",command=w.quit)Command屬性:指定按鈕的事件處理函數(shù),將按鈕與某個(gè)函數(shù)或方法關(guān)聯(lián)起來(lái)。例10-3fromtkinterimport*top=Tk()top.title(u"主窗口")bt1=Button(top,text=u"禁用",state=DISABLED)bt2=Button(top,text=u"退出",command=top.quit)bt1.pack(side=LEFT)bt2.pack(side=LEFT)top.mainloop()10.2.4輸入框輸入框(Entry)是用來(lái)接收用戶(hù)文本輸入的組件。E1=Entry(f1,width=30)例10-4fromtkinterimport*top=Tk()top.title(u"登錄")f1=Frame(top)Label(f1,text=u"用戶(hù)名").pack(side=LEFT)E1=Entry(f1,width=30)E1.pack(side=LEFT)f1.pack()f2=Frame(top)Label(f2,text=u"密碼").pack(side=LEFT)E2=Entry(f2,width=30)E2.pack(side=LEFT)f2.pack()f3=Frame(top)Button(f3,text=u"登錄").pack()f3.pack()top.mainloop()10.2.5單選按鈕和復(fù)選按鈕單選按鈕(Radiobutton)和復(fù)選按鈕(Checkbutton)比較:相同點(diǎn):都是用于用戶(hù)進(jìn)行選擇輸入。區(qū)別:前者是互斥性選擇,即用戶(hù)只能從一組選項(xiàng)中選擇一個(gè)選項(xiàng);而后者支持用戶(hù)選擇多個(gè)選項(xiàng)。(1)單選按鈕的創(chuàng)建:需要將這些按鈕與一個(gè)相同的變量關(guān)聯(lián)起來(lái),以設(shè)定或獲取單選按鈕組當(dāng)前的選中狀態(tài)。

r=Radiobutton(f1,text=txt,value=val,variable=choice)(2)復(fù)選框的創(chuàng)建:需要將每個(gè)選項(xiàng)與一個(gè)不同的變量關(guān)聯(lián)起來(lái),以表示每個(gè)選項(xiàng)的選中狀態(tài)。r=Checkbutton(f1,text=txt,variable=ch,command=update_cstr)fromtkinterimport*top=Tk()top.title(u"單選")f1=Frame(top)choice=IntVar(f1)#定義動(dòng)態(tài)綁定變量fortxt,valin[('1',1),('2',2),('3',3)]:#將所有的選項(xiàng)與變量choice綁定起來(lái)r=Radiobutton(f1,text=txt,value=val,variable=choice)r.pack()choice.set(1)#設(shè)定默認(rèn)選項(xiàng)Label(f1,text=u"您選擇了:").pack()Label(f1,textvariable=choice).pack()#將標(biāo)簽與變量動(dòng)態(tài)綁定起來(lái)f1.pack()top.mainloop()例10-5例10-6fromtkinterimport*top=Tk()top.title(u"多選")f1=Frame(top)choice={}#存放綁定變量的字典cstr=StringVar(f1)cstr.set("")defupdate_cstr():selected=[str(i)foriin[1,2,3]ifchoice[i].get()==1]

cstr.set(",".join(selected))fortxt,valin[('1',1),('2',2),('3',3)]:ch=IntVar(f1)#建立與每個(gè)選項(xiàng)綁定的變量choice[val]=ch#將綁定的變量加入字典choicer=Checkbutton(f1,text=txt,variable=ch,command=update_cstr)r.pack()Label(f1,text=u"您選擇了:").pack()Label(f1,textvariable=cstr).pack()f1.pack()top.mainloop()10.2.6列表框與滾動(dòng)條列表框(Listbox):用列表的形式展示多個(gè)選項(xiàng)以供用戶(hù)選擇。滾動(dòng)條(Scrollbar):用來(lái)處理組件界面上一次性顯示不全的情況。scrollbar=Scrollbar(top)#創(chuàng)建滾動(dòng)條mylist=Listbox(top,yscrollcommand=scrollbar.set)fromtkinterimport*top=Tk()top.title(u"列表框")scrollbar=Scrollbar(top)#創(chuàng)建滾動(dòng)條scrollbar.pack(side=RIGHT,fill=Y)#設(shè)置滾動(dòng)條布局#將列表與滾動(dòng)條綁定,并加入主窗體mylist=Listbox(top,yscrollcommand=scrollbar.set)forlineinrange(20):mylist.insert(END,str(line))mylist.pack(side=LEFT,fill=BOTH)#設(shè)置列表布局scrollbar.config(command=mylist.yview)#將滾動(dòng)條行為與列表綁定mainloop()例10-710.3對(duì)象的布局方式10.3.1pack布局管理器pack布局管理器將所有控件組織為一行或一列,控件的添加順序決定了它們?cè)诟缚丶械奈恢?。side屬性:改變控件的排列位置,LEFT表示左側(cè)對(duì)齊,RIGHT表示右側(cè)對(duì)齊。fill屬性:設(shè)置填充空間。 X:在水平方向填充, Y:在垂直方向填充, BOTH:在水平和垂直兩個(gè)方向上填充, NONE:不填充。ipadx/ipady:用于設(shè)置控件內(nèi)部在水平/垂直方向的間距。padx/pady用于設(shè)置控件外部在水平/垂直方向的間距。expand屬性:指定如何使用額外的“空白”空間。 =1:隨著父控件的大小變化而變化, =0:子控件大小不能擴(kuò)展。fromtkinterimport*w=Tk()w.geometry('250x100')#改變w的大小為250x100Lbl1=Label(w,text='北京',bg='yellow3')Lbl1.pack(expand=1,side=LEFT,ipadx=20)Lbl2=Label(w,text='天津',bg='red')Lbl2.pack(fill=BOTH,expand=1,side=LEFT,padx=10)Lbl3=Label(w,text='上海',bg='green')Lbl3.pack(fill=X,expand=0,side=RIGHT,padx=10)w.mainloop()例10-810.3.2grid布局管理器grid布局管理器將窗口或框架視為一個(gè)由行和列構(gòu)成的二維表格,并將控件放入行列交叉處的單元格中。row:指定控件所要放置的行編號(hào)。column:指定控件所要放置的列編號(hào)。Sticky:用來(lái)改變對(duì)齊方式。如N、S、E、W、CENTER表示上、下、左、右、中心點(diǎn),還可以取NE、SE、NW、SW,表示右上角、右下角、左上角、左下角。Rowspan:指定在行方向上的跨度。Columnspan:指定在列方向上的跨度。例10-9fromtkinterimport*w=Tk()var1=IntVar()var2=IntVar()Label(w,text="姓名").grid(row=0,column=0,sticky=W)Label(w,text="住址").grid(row=1,column=0,sticky=W)Entry(w).grid(row=0,column=1)Entry(w).grid(row=1,column=1)lframe=LabelFrame(w,text='性別')radiobutton1=Radiobutton(lframe,text='男',variable=var1)radiobutton2=Radiobutton(lframe,text='女',variable=var2)lframe.grid(sticky=W)radiobutton1.grid(sticky=W)radiobutton2.grid(sticky=W)photo=PhotoImage(file="e:\\mypython\\photo.png")label=Label(image=photo)label.image=photolabel.grid(row=2,column=1,sticky=W+E+N+S,padx=5,pady=5)w.mainloop()10.3.3place布局管理器place布局管理器可以直接指定控件在父控件(窗口或框架)中的位置坐標(biāo)。為使用這種布局,只需先創(chuàng)建控件,再調(diào)用控件的place()方法,并使用該方法的選項(xiàng)x和y設(shè)定坐標(biāo)。父控件的坐標(biāo)系以左上角為原點(diǎn)(0,0),x軸方向向右,y軸方向向下。>>>Label(w,text="Hello").place(x=0,y=0)>>>Label(w,text="World").place(x=199,y=199,anchor=SE)>>>Label(w,text="Hello").place(relx=0.25,rely=0.5,anchor=SW)10.4對(duì)話(huà)框10.4.1自定義對(duì)話(huà)框主要步驟:(1)先創(chuàng)建頂層窗口對(duì)象(2)添加所需的按鈕和其他控件。例10-10簡(jiǎn)易對(duì)話(huà)框應(yīng)用示例。fromtkinterimport*defMsg():top=Toplevel(width=400,height=200)Label(top,text='Python').pack()w=Tk()Button(w,text='OK',command=Msg).pack()w.mainloop()10.4.2標(biāo)準(zhǔn)對(duì)話(huà)框1.messagebox子模塊

提供一系列用于顯示信息或進(jìn)行簡(jiǎn)單對(duì)話(huà)的消息框,可通過(guò)調(diào)用函數(shù)askyesno()、askquestion()、askyesnocancel()、askokcancel()、askretrycancel()、showerror()、showinfo()和showwarning()來(lái)創(chuàng)建。fromtkinter.messageboximport*ask=askyesno(title='消息框演示',message='是否繼續(xù)?')ifask:showinfo(title='信息提示',message='繼續(xù)!')else:showinfo(title='信息提示',message='終止!')例子:2.filedialog子模塊

提供用于文件瀏覽、打開(kāi)和保存的對(duì)話(huà)框,可通過(guò)調(diào)用函數(shù)askopenfilename()、asksaveasfilename()等函數(shù)來(lái)創(chuàng)建。fromtkinter.filedialogimport*askopenfilename(title='文件對(duì)話(huà)框',\filetypes=[('Python源文件','.py')])例子:打開(kāi)對(duì)話(huà)框3.colorchooser子模塊提供用于選擇顏色的對(duì)話(huà)框,可通過(guò)函數(shù)askcolor()來(lái)創(chuàng)建。fromtkinter.colorchooserimport*askcolor(title='顏色對(duì)話(huà)框')10.5事件處理10.5.1事件處理程序1.事件的描述一般形式是:<修飾符>-<類(lèi)型符>-<細(xì)節(jié)符>修飾符:描述鼠標(biāo)的單擊、雙擊,以及鍵盤(pán)組合按鍵等情況。類(lèi)型符:事件類(lèi)型,最常用的類(lèi)型有分別表示鼠標(biāo)事件和鍵盤(pán)事件的Button和Key。細(xì)節(jié)符:具體的鼠標(biāo)鍵或鍵盤(pán)按鍵,如鼠標(biāo)的左、中、右三個(gè)鍵分別用1、2、3表示,鍵盤(pán)按鍵用相應(yīng)字符或按鍵名稱(chēng)表示。例如:<Double-Button-1>(1)常用鼠標(biāo)事件<ButtonPress-1>:按下鼠標(biāo)左鍵,可簡(jiǎn)寫(xiě)為<Button-1>或<1>。類(lèi)似的有<Button-2>(按下鼠標(biāo)中鍵)和<Button-3>(按下鼠標(biāo)右鍵)。<B1-Motion>:按下鼠標(biāo)左鍵并移動(dòng)鼠標(biāo)。類(lèi)似的有<B2-Motion>和<B3-Motion>。<Double-Button-1>:雙擊鼠標(biāo)左鍵。<Enter>:鼠標(biāo)指針進(jìn)入控件。<Leave>:鼠標(biāo)指針離開(kāi)控件。(2)常用鍵盤(pán)事件<KeyPress-a>:按下a鍵??珊?jiǎn)寫(xiě)為<Key-a>或a(不用尖括號(hào))。注意:空格鍵對(duì)應(yīng)的事件是<space>,小于號(hào)鍵對(duì)應(yīng)的事件是<less>。<Return>:按下回車(chē)鍵。不可顯示字符都可像回車(chē)鍵這樣用<鍵名>表示對(duì)應(yīng)事件,例如<Tab>、<Shift_L>、<Control_R>、<Up>、<Down>、<F1>等。<Key>:按下任意鍵。<Shift-Up>:同時(shí)按下Shift鍵和↑鍵。類(lèi)似的還有Alt鍵組合、Ctrl鍵組合。2.事件對(duì)象每個(gè)事件都導(dǎo)致系統(tǒng)創(chuàng)建一個(gè)事件對(duì)象,并將該對(duì)象傳遞給事件處理函數(shù)。常用的屬性x和y:鼠標(biāo)單擊位置相對(duì)于控件左上角的坐標(biāo),單位是像素。x_root和y_root:鼠標(biāo)單擊位置相對(duì)于屏幕左上角的坐標(biāo),單位是像素。num:?jiǎn)螕舻氖髽?biāo)鍵號(hào),1、2、3分別表示左、中、右鍵。char:如果按下可顯示字符鍵,此屬性是該字符。如果按下不可顯示鍵,此屬性為空串。keysym:如果按下可顯示字符鍵,此屬性是該字符。如果按下不可顯示鍵,此屬性設(shè)置為該鍵的名稱(chēng)。keycode:所按鍵的ASCII碼。注意,此編碼無(wú)法得到上擋字符的ASCII碼。keysym_num:這是keysym的數(shù)值表示。對(duì)普通單字符鍵來(lái)說(shuō),就是ASCII碼。3.事件處理函數(shù)(回調(diào)(callback)函數(shù))的一般形式def函數(shù)名(event):

函數(shù)體10.5.2事件綁定1.事件綁定的方式(1)對(duì)象綁定和窗口綁定形式如下:控件對(duì)象.bind(事件描述符,事件處理程序)fromtkinterimport*

defcallback(event):

print("clickedat",event.x,event.y)

w=Tk()

w.bind("<Button-1>",callback)

w.mainloop()例10-11窗口綁定應(yīng)用示例。(2)類(lèi)綁定一般形式如下:控件對(duì)象.bind_class(控件類(lèi)描述符,事件描述符,事件處理程序)例10-12類(lèi)綁定應(yīng)用示例。fromtkinterimport*defcallback(event):print("Python")w=Tk()b1=Button(w,text="OK1")b2=Button(w,text="OK2")b1.bind_class("Button","<Button-1>",callback)b1.pack()b2.pack()w.mainloop()應(yīng)用程序綁定:對(duì)應(yīng)程序中的所有控件都有效。一般形式如下:控件對(duì)象.bind_all(事件描述符,事件處理程序)例10-13應(yīng)用程序綁定應(yīng)用示例。fromtkinterimport*defcallback(event):print("Python")w=Tk()b1=Button(w,text="OK1")b2=Button(w,text="OK2")l=Label(w,text="OK3")b1.bind_all("<Button-1>",callback)b1.pack()b2.pack()l.pack()w.mainloop()2.鍵盤(pán)事件與焦點(diǎn)焦點(diǎn)(focus)是指當(dāng)前正在操作的對(duì)象。在處理鍵盤(pán)事件時(shí),需要執(zhí)行一個(gè)額外的步驟,即設(shè)置焦點(diǎn)。設(shè)置焦點(diǎn)的兩種方法:調(diào)用對(duì)象的focus_set()方法使用Tab鍵來(lái)移動(dòng)焦點(diǎn)例10-14焦點(diǎn)應(yīng)用示例。fromtkinterimport*defshow1(event):print("pressed",(event.char).lower())defshow2(event):print("pressed",(event.char).upper())w=Tk()b1=Button(w,text='OK1')b1.bind('<Key>',show1)b2=Button(w,text='OK2')b2.bind('<Key>',show2)b1.focus_set()b1.pack()b2.pack()w.mainloop()第11章文件操作第11章

文件操作文件的基本概念文件讀、寫(xiě)方法1.文件的概念

文件是一組用文件名標(biāo)識(shí)的數(shù)據(jù)集合,存儲(chǔ)在外部介質(zhì)(如磁盤(pán))上。

根據(jù)存儲(chǔ)格式不同,分為:文本文件和二進(jìn)制文件文本文件:由字符組成,按ASCII碼、UTF-8或Unicode等編碼,可以通過(guò)文本編輯器進(jìn)行編輯,占用存儲(chǔ)空間較多,且需要花費(fèi)時(shí)間進(jìn)行轉(zhuǎn)換(二進(jìn)制形式與ASCII碼間的轉(zhuǎn)換)。二進(jìn)制文件:將內(nèi)存中的數(shù)據(jù)按照其在內(nèi)存中的存儲(chǔ)形式原樣輸出到磁盤(pán)上進(jìn)行存儲(chǔ)。典型的二進(jìn)制文件包括數(shù)據(jù)庫(kù)文件、圖像文件、可執(zhí)行文件等。不能看作是字符串,只能當(dāng)作字節(jié)流。11.1文件的概念2.文件操作

首先打開(kāi)文件,并創(chuàng)建文件對(duì)象,

然后通過(guò)該文件對(duì)象對(duì)文件內(nèi)容進(jìn)行讀寫(xiě),

最后關(guān)閉文件。

讀(read):從文件中取數(shù)據(jù),輸入到內(nèi)存。

寫(xiě)(write):將內(nèi)存數(shù)據(jù)輸出到磁盤(pán)文件。11.2文件的打開(kāi)與關(guān)閉11.2.1打開(kāi)文件

在程序和操作系統(tǒng)之間建立起聯(lián)系,把文件的一些信息通知給操作系統(tǒng)。1.open()函數(shù)

返回一個(gè)文件對(duì)象,對(duì)文件進(jìn)行各種操作。文件對(duì)象=open(“文件名”[,“打開(kāi)方式”][,緩沖區(qū)])文件名:可以包含盤(pán)符、路徑,是一個(gè)字符串。

表示路徑時(shí),使用"\\"、"/"或"http://"打開(kāi)方式:讀寫(xiě)方式,默認(rèn)是只讀。緩沖區(qū):是否使用緩沖存儲(chǔ)。0表示不使用緩沖存儲(chǔ);-1或>=1表示使用緩沖存儲(chǔ)(默認(rèn))。打開(kāi)方式:”r”:只讀,文件不存在時(shí)返回異?!眞”:覆蓋寫(xiě),文件不存在則創(chuàng)建,存在則完全覆蓋“x":創(chuàng)建寫(xiě),文件不存在則創(chuàng)建,存在則返回異?!盿”:追加寫(xiě),文件不存在則創(chuàng)建,存在則在文件最后追加內(nèi)容“r+”、“w+”、“a+”:原功能基礎(chǔ)上增加讀寫(xiě)功能"rb"、"wb"、"xb"、"ab":二進(jìn)制文件的讀寫(xiě)模式open("test.txt","r")open("test.txt")

open("test.txt","w")2.文件對(duì)象屬性引用方法:文件對(duì)象名.屬性屬性:name:返回文件的名字

mode:返回文件的打開(kāi)方式

closed:若文件被關(guān)閉返回True,否則返回Falsefo=open("file.txt","wb")print("Nameofthefile:",)print("Closedornot:",fo.closed)print("Openingmode:",fo.mode)程序運(yùn)行結(jié)果如下:Nameofthefile:file.txtClosedornot:FalseOpeningmode:wb3.文件對(duì)象方法11.2.2關(guān)閉文件

當(dāng)對(duì)文件內(nèi)容操作完成后,需要關(guān)閉文件,才能正確保存文件并釋放資源供其它程序使用。close()方法關(guān)閉文件,其調(diào)用格式為:文件對(duì)象.close()

fo=open("file.txt","wb")print("Nameofthefile:",)fo.close()11.3文本文件的操作11.3.1文本文件的讀取1.read()方法

變量=文件對(duì)象.read()

讀取從當(dāng)前位置直到文件末尾的內(nèi)容,并作為字符串返回,賦給變量。如果是剛打開(kāi)的文件對(duì)象,則讀取整個(gè)文件。

可以帶有參數(shù):變量=文件對(duì)象.read(size)

讀取從文件當(dāng)前位置開(kāi)始的size個(gè)字符,并作為字符串返回,賦給變量。(1)如果文件結(jié)束,就讀取到文件結(jié)束為止。(2)如果size大于文件從當(dāng)前位置到末尾的字符數(shù),則僅返回這些字符。例10-1文本文件file.txt里的內(nèi)容:Pythonisveryuseful.ProgramminginPythonisveryeasy.統(tǒng)計(jì)字母a的次數(shù)。分析:先讀取文件的全部?jī)?nèi)容,得到一個(gè)字符串,然后遍歷字符串,統(tǒng)計(jì)字母a的個(gè)數(shù)。infile=open(“file.txt","r")s=infile.read()print(s)n=0forcins:ifcin'a':n+=1print(n)infile.close()程序運(yùn)行結(jié)果:Pythonisverynice.ProgramminginPythonisveryeasy.(空一行)22.readline()方法

變量=文件對(duì)象.readline()

讀取從當(dāng)前位置到行末(即下一個(gè)換行符)的所有字符,并作為字符串返回給變量。通常用此方法來(lái)讀取文件的當(dāng)前行,包括行結(jié)束符。如果當(dāng)前處于文件末尾,則返回空串。>>>file=open(“file.txt”,“r”)>>>content=fo.readline()>>>print(content)Pythonisverynice.>>>content=fo.readline()>>>print(content)ProgramminginPythonisveryeasy.>>>content=fo.readline()#輸出’’【例

11-2】已經(jīng)建立文本文件

file.txt,統(tǒng)計(jì)文件中字母

a出現(xiàn)的次數(shù),用

readline()函數(shù)實(shí)現(xiàn)。file=open("file.txt","r")#讀取文件s=file.readline()#讀取一行n=0whiles!='':#若沒(méi)有讀取完則繼續(xù)循環(huán) print(s[:-1])#顯示文件內(nèi)容 forcins:#遍歷讀取字符串 ifcin'a':n+=1 s=file.readline()#讀取下一行print(n)file.close()#關(guān)閉文件程序運(yùn)行結(jié)果:Pythonisverynice.ProgramminginPythonisveryeasy.23.readlines()方法

變量=文件對(duì)象.readlines()

讀取從當(dāng)前位置直到文件末尾的所有行,并將這些行構(gòu)成列表返回,賦給變量。列表中的元素即每一行構(gòu)成的字符串。如果當(dāng)前處于文件末尾,則返回空列表。file=open("d:\\file.txt","r")list=file.readlines()print(list)file.close()['Pythonisverynice.\n','ProgramminginPythonisveryeasy.\n']輸出結(jié)果:

【例

11-3】已經(jīng)建立文本文件

file.txt,統(tǒng)計(jì)文件中字母

a出現(xiàn)的次數(shù)。用

readlines()方法實(shí)現(xiàn)。file=open("d:\\file.txt","r")#打開(kāi)文件,準(zhǔn)備讀取list=file.readlines()#讀取各行,并存到列表n=0forsinlist:#遍歷列表print(s[:-1])#顯示文件內(nèi)容forcins:#遍歷列表的字符串元素ifcin'a':n+=1print(n)file.close()#關(guān)閉文件11.3.2文本文件的寫(xiě)入1.write()方法

文件對(duì)象.write(字符串)在文件當(dāng)前位置寫(xiě)入字符串,并返回字符的個(gè)數(shù)。Write方法執(zhí)行完后并不換行!【例

11-4】從鍵盤(pán)輸入若干字符串,逐個(gè)將它們寫(xiě)入

file1.txt中,知道輸入“*”時(shí)結(jié)束。然后從該文件中逐個(gè)讀出字符串,并在屏幕上顯示出來(lái)。

file=open(“d:\\file1.txt”,“w”)#打開(kāi)文件,準(zhǔn)備建立文本文件print("輸入多行字符串(輸入'*'結(jié)束):")s=input()#從鍵盤(pán)輸入一個(gè)字符串whiles!=“*”:#不斷輸入,直到輸入結(jié)束標(biāo)志file.write(s+‘\n‘)#將字符串寫(xiě)入文件s=input()#從鍵盤(pán)輸入一個(gè)字符串file.close()file=open(“d:\\file1.txt”,“r”)#打開(kāi)文件,準(zhǔn)備讀取s=file.read()print("輸出文本文件:")print(s.strip())2.writelines()方法文件對(duì)象.writelines(字符串元素的列表)在文件當(dāng)前位置處依次寫(xiě)入列表中的所有字符串。(1)列表類(lèi)型的各字符串元素連接起來(lái)寫(xiě)入文件中(2)寫(xiě)入文件不會(huì)含引號(hào)(3)不會(huì)自動(dòng)加入換行符file=open("file2.dat","w")file.writelines(["Python語(yǔ)言","Python程序\n","Python程序設(shè)計(jì)"])file.close()【例

11-5】從鍵盤(pán)輸入若干字符串,逐個(gè)將它們寫(xiě)入

file1.txt的尾部,直到輸入“*”時(shí)結(jié)束。然后從該文件中逐個(gè)讀出字符串,并在屏幕上顯示出來(lái)。print("輸入多行字符串(輸入“*”結(jié)束)")list=[]whileTrue:

s=input()ifs=="*":breaklist.append(s+"\n")file=open("d:\\file1.txt","a")file.writelines(list)file.close()file=open("d:\\file1.txt","r")s=file.read()print("輸出文本文件:")print(s.strip())有以下程序代碼,輸出結(jié)果是_______。f1=open('d:\\a1.txt','w')f1.write("1")f1.write('2')f1.close()f1=open('d:\\a1.txt','r')s=f1.readline()print(s)12有以下程序代碼,輸出結(jié)果是_______。f1=open('d:\\a1.txt','w')list=['a','b\n','c','d']f1.writelines(list)f1.close()f1=open('d:\\a1.txt','r')s=f1.readline()print(s)ab已經(jīng)建立文本文件data.txt,文件中的內(nèi)容為:WelcometoNanchang,下面代碼執(zhí)行后的結(jié)果為_(kāi)____________。infile=open("data.txt","r")#打開(kāi)文件,準(zhǔn)備輸出文本文件

ls=infile.readlines()#讀取各行,得到一個(gè)列表

n=0

forsinls:#遍歷列表

print(s[:-1])#顯示文件內(nèi)容

forcins:#遍歷列表的字符串元素

ifcin'aeiouAEIOU':n+=1

print(n)

infile.close()61.tell()方法格式:

文件對(duì)象.tell()

功能:返回文件的當(dāng)前位置,即相對(duì)于文件開(kāi)始位置的字節(jié)數(shù),下一個(gè)讀取或?qū)懭氩僮鲗l(fā)生在當(dāng)前位置。例如:>>>fo=open("data.txt","r")>>>fo.tell()0>>>content=file.read(6)>>>num=file.tell()611.4.1文件的定位11.4二進(jìn)制文件的操作2.seek()方法:更改當(dāng)前的文件位置。文件對(duì)象.seek(偏移[,參考點(diǎn)])偏移:移動(dòng)的字節(jié)數(shù)

正數(shù)向文件尾移動(dòng),負(fù)數(shù)向文件頭移動(dòng)參考點(diǎn):當(dāng)前文件的位置

0表示文件頭部,默認(rèn)值為0

1表示當(dāng)前位置

2表示文件末尾file=open("d:\\file.txt","rb")distance=file.seek(6,0)print(distance)content=file.read()print(content)運(yùn)行結(jié)果6b'isverynice.\r\nProgramminginPythonisveryeasy.\r\n'11.4.2二進(jìn)制文件的讀寫(xiě)二進(jìn)制文件的讀/寫(xiě)操作可以用文件對(duì)象read()和write()方法。例11-6s=input('輸入一個(gè)字符串:')s=s.encode()#變成字節(jié)數(shù)據(jù)file=open('file2.txt',"wb")#建立二進(jìn)制文件file.write(s)file.close()file=open('file2.txt','rb')#讀二進(jìn)制文件list=[]forninrange(1,len(s)+1):file.seek(-n,2)#文件定位從最后一個(gè)字符到以一個(gè)字符s=file.read(1)#讀一個(gè)字節(jié)s=chr(ord(s.decode())^24)#加密處理list,append(s)list=''.join(list)#將序列元素組合成字符串print(list)file.close()2.struct模板用字符串類(lèi)型來(lái)存儲(chǔ)二進(jìn)制數(shù)據(jù)。pack()函數(shù):把整型(或浮點(diǎn)型)打包成二進(jìn)制的字符串。字符串=struct.pack(‘包裝類(lèi)型’,包裝數(shù)據(jù))>>>importstruct>>>a=65>>>bytes=struct.pack('i',a)>>>print(bytes)b’A\x00\x00\x00’解包元組=struct.unpack(‘解包類(lèi)型’,解包數(shù)據(jù))unpack()函數(shù):將字節(jié)數(shù)據(jù)轉(zhuǎn)換成整型(或浮點(diǎn)型)>>>file=open("file3.txt","rb")>>>bytes=file.read(4)>>>a=struct.unpack('i',bytes)>>>print(a)(65,)注意,unpack()函數(shù)執(zhí)行后得到的結(jié)果是一個(gè)元組。3.pickle模塊用于Python的對(duì)象(包括內(nèi)置類(lèi)型和自定義類(lèi)型)直接寫(xiě)入到文件中,而不需要先把它們轉(zhuǎn)化為字符串再保存,也不需要底層的文件訪(fǎng)問(wèn)操作把它們寫(xiě)入到一個(gè)二進(jìn)制文件里。2個(gè)常用的函數(shù):dump()函數(shù)pickle.dump(數(shù)據(jù),文件對(duì)象)load()函數(shù)變量=pickle.load(文件對(duì)象)importpickleinfo={'one':1,'two':2,'three':3}file=open('file4','wb')pickle.dump(info,file)file.close()>>>importpickle>>>file2=open('file4','rb')>>>info1=pickle.load(f2)>>>file2.close()>>>print(info1){'three':3,'two':2,'one':1}11.5文件管理方法11.5.1文件重命名rename()函數(shù)os.rename(“當(dāng)前文件名”,“新文件名”)>>>importos>>>os.rename(“test1.txt”,“test2.txt”)11.5.2文件刪除remove()函數(shù)os.remove(“文件名”)>>>importos>>>os.remove(“text2.txt”)11.5.3Python中的目錄操作1.mkdir()函數(shù)os.mkdir(“新目錄名”)>>>importos>>>os.mkdir(“test”)2.chdir()函數(shù)os.chdir(“要成為當(dāng)前目錄的目錄名”)>>>importos>>>os.chdir("d:\\home\\newdir")3.getcwd()函數(shù)一般格式為:os.getcwd()>>>importos>>>os.getcwd()4.rmdir()函數(shù)

一般格式為:os.rmdir(“待刪除目錄名”)>>>importos>>>os.rmdir('d:\\aaaa')第12章Python語(yǔ)言與大數(shù)據(jù)挖掘12.1大數(shù)據(jù)的概念12.1.1大數(shù)據(jù)的含義大數(shù)據(jù)的特征歸納為4個(gè)“V”體量大(Volume):數(shù)據(jù)體量巨大,大數(shù)據(jù)的起始計(jì)量單位至少是PB(103TB)、EB(105TB)、或ZB(109TB)速度快(Velocity):數(shù)據(jù)收集頻率高,維度大,處理速度快。類(lèi)型多(Variety):數(shù)據(jù)類(lèi)型繁多,比如網(wǎng)絡(luò)日志、視頻、圖片、地理位置信息等價(jià)值大(Value):值密度低,商業(yè)價(jià)值高,須進(jìn)行數(shù)據(jù)挖掘。12.1.2大數(shù)據(jù)的應(yīng)用方法例1.啤酒與尿布這個(gè)故事發(fā)生于20世紀(jì)90年代的美國(guó)超市中,超市管理人員分析銷(xiāo)售數(shù)據(jù)時(shí)發(fā)現(xiàn)了一個(gè)令人難于理解的現(xiàn)象:在某些特定的情況下,“啤酒”與“尿布”兩件看上去毫無(wú)關(guān)系的商品會(huì)經(jīng)常出現(xiàn)在同一個(gè)購(gòu)物籃中,這種獨(dú)特的銷(xiāo)售現(xiàn)象引起了管理人員的注意,經(jīng)過(guò)后續(xù)調(diào)查發(fā)現(xiàn),男性顧客在購(gòu)買(mǎi)嬰兒尿片時(shí),常常會(huì)順便搭配幾瓶啤酒來(lái)犒勞自己,于是嘗試推出了將啤酒和尿布擺在一起的促銷(xiāo)手段。沒(méi)想到這個(gè)舉措居然使尿布和啤酒的銷(xiāo)量都大幅增加。如今,這一案例的已經(jīng)被列為數(shù)據(jù)分析的經(jīng)典,被人津津樂(lè)道。12.1.3大數(shù)據(jù)的分析方法1.采集(存儲(chǔ))指利用多個(gè)數(shù)據(jù)庫(kù)來(lái)接收發(fā)來(lái)自客戶(hù)端的數(shù)據(jù),并且用戶(hù)可以通過(guò)這些數(shù)據(jù)庫(kù)進(jìn)行簡(jiǎn)單的查詢(xún)和處理工作。2.導(dǎo)入和預(yù)處理將來(lái)自前端的數(shù)據(jù)導(dǎo)入一個(gè)集中的大型分布式數(shù)據(jù)庫(kù)或者分布式存儲(chǔ)集群,并且可以在導(dǎo)入基礎(chǔ)上做一些簡(jiǎn)單的清洗和預(yù)處理工作。導(dǎo)入與預(yù)處理過(guò)程的特點(diǎn)和挑戰(zhàn)主要是導(dǎo)入的數(shù)據(jù)量大,每秒鐘的導(dǎo)入量經(jīng)常會(huì)達(dá)到百兆甚至千兆級(jí)別。3.統(tǒng)計(jì)和分析利用分布式數(shù)據(jù)庫(kù)或者分布式計(jì)算集群對(duì)存儲(chǔ)在其中的海量數(shù)據(jù)進(jìn)行普通的分析和分類(lèi)匯總,以滿(mǎn)足大多數(shù)常見(jiàn)的分析需求。4.挖掘(算法)數(shù)據(jù)挖掘一般沒(méi)有預(yù)先設(shè)定好的主題,而是對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行基于各種算法的計(jì)算,從而達(dá)到預(yù)測(cè)效果,并實(shí)現(xiàn)一些高級(jí)別的數(shù)據(jù)分析需求。典型的算法包括用于聚類(lèi)的K-Means算法、用于統(tǒng)計(jì)學(xué)習(xí)的SVM算法以及用于分類(lèi)的NaiveBayes算法等。一些實(shí)時(shí)性需求可以用到EMC的GreenPlum、Oracle的Exadata,以及基于MySQL的列式存儲(chǔ)Infobright等。而一些批處理或者基于半結(jié)構(gòu)化數(shù)據(jù)的需求可以使用Hadoop。12.2Python文本預(yù)處理1字符及字符串統(tǒng)計(jì)len()函數(shù):分別對(duì)字段自身長(zhǎng)度、列表長(zhǎng)度和嵌套列表長(zhǎng)度進(jìn)行統(tǒng)計(jì)。2字符串連接與拆分1.連接方法:加號(hào)‘+’。例如:‘Python’+‘DataAnalysis’

2.連接方法:字符串格式化輸出。例如:website=‘%s%s%s’%(‘Python’,‘tab’,‘com’)

3.連接方法:join()4.拆分方法:split()>>>listStr=['Python','tab','.com']>>>sentence=''.join(listStr)12.2.3字符串查詢(xún)?cè)赑ython中in可以實(shí)現(xiàn)直接查詢(xún)(集合操作)。自定義一個(gè)列表查詢(xún)函數(shù)find_words()。deffind_words(content,pattern):list=[]if(patternincontent[i]):list.append(content[i])returnlistlist=find_words(S5,'人工智能')print(list)12.2.4字符串替換replace()函數(shù)可以對(duì)字符串的內(nèi)容進(jìn)行替換。自定義一個(gè)針對(duì)列表的字符串替換函數(shù)。deflist_replace(content,old,new):if(content)foriinrange(len(content)):content[i].replace(old,new)returncontentlist_replace(S5,'人工智能','ArtificialIntelligence')print(S5)12.3網(wǎng)絡(luò)爬蟲(chóng)網(wǎng)絡(luò)爬蟲(chóng),又稱(chēng)網(wǎng)頁(yè)蜘蛛或網(wǎng)絡(luò)機(jī)器人,按照一定的規(guī)則自動(dòng)抓取網(wǎng)絡(luò)中的信息。12.3.1網(wǎng)頁(yè)的基礎(chǔ)知識(shí)1.網(wǎng)頁(yè)資料結(jié)構(gòu)一個(gè)HTML網(wǎng)頁(yè)中含有各種網(wǎng)頁(yè)的元素(elements),每個(gè)元素通常都會(huì)使用HTML的標(biāo)簽(tags)前后包起來(lái)。例如:<P>網(wǎng)頁(yè)內(nèi)容</P>

大部分HTML元素都是以巢狀資料結(jié)構(gòu)存在的。<ul><li>foo</li><li>bar</li></ul>2.路徑選擇工具:

SelectorGadget是GoogleChrome瀏覽器的一個(gè)插件工具,可以用來(lái)顯示網(wǎng)頁(yè)中任意元素的CSS選擇器路徑,幫助快速擷取網(wǎng)頁(yè)上的資料。12.3.2Python爬蟲(chóng)步驟1.讀取網(wǎng)頁(yè)Importrequests#加載網(wǎng)頁(yè)抓取包defread_html(url,encoding='utf-8'):#定義讀取html網(wǎng)頁(yè)函數(shù)response=requests.get(url)response.encoding='utf-8'return(response.text)url='/translate?aldtype=16047&query=%E7%88%AC%E8%99%AB%0D%0A&keyfrom=baidu&smartresult=dict&lang=auto2zh#/zh/en/'page=read_htmlprint(page)2.提取信息打開(kāi)百度翻譯

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論