




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章爬蟲之?dāng)?shù)據(jù)存儲(chǔ)
數(shù)我們知道,網(wǎng)頁中的數(shù)據(jù)基本都是非結(jié)構(gòu)化數(shù)據(jù)。通過爬蟲將網(wǎng)頁抓取下來后,通過解析工具將非結(jié)構(gòu)化數(shù)據(jù)提取出來,為了便于后繼的數(shù)據(jù)分析處理,往往需要將解析后的數(shù)據(jù)變成半結(jié)構(gòu)化和結(jié)構(gòu)化的數(shù)據(jù)。本章節(jié)重點(diǎn)介紹常用的網(wǎng)頁數(shù)據(jù)存儲(chǔ)格式:TXT文本文件、JSON數(shù)據(jù)格式、CSV文件格式以及MYSQL數(shù)據(jù)庫文件格式。在程序編寫的過程中,一般的實(shí)際應(yīng)用程序都會(huì)涉及大量的輸入輸出數(shù)據(jù)的處理。其中數(shù)據(jù)的存儲(chǔ)和讀取存取在磁盤介質(zhì)上的數(shù)據(jù)是一項(xiàng)重要的工作。數(shù)據(jù)的存儲(chǔ)一般有文本文件和數(shù)據(jù)庫形式。常用的文本文件形式有cvs、txt、json等文本文件格式。本章主要講解python中的文本文件處理。4.1Python語言之文件操作Python文本文件操作,分為寫入文件和讀取文件。文件讀寫的過程主要分為三個(gè)步驟,打開、讀寫、關(guān)閉。首先需要打開文件并創(chuàng)建文件對(duì)象,然后通過該文件對(duì)象對(duì)文件內(nèi)容進(jìn)行讀寫操作,最后關(guān)閉文件。文件的讀操作就是從文件中取出數(shù)據(jù)到內(nèi)存緩沖區(qū)中;文件的寫操作就是將內(nèi)存緩沖區(qū)中的數(shù)據(jù)輸出到磁盤文件中。4.1.1文件的打開與關(guān)閉在對(duì)文件進(jìn)行讀寫操作之前,首先需要打開文件,建立文件對(duì)象;文件讀寫結(jié)束后,必須關(guān)閉文件。Python提供了open()函數(shù)和close()函數(shù)完成相應(yīng)的操作。1、打開文件open()函數(shù)4.1Python語言之文件操作open()函數(shù)首先創(chuàng)建一個(gè)文件對(duì)象,是有這個(gè)文件對(duì)象才完成后繼的文件操作。open()函數(shù)的一般調(diào)用格式為:
文件對(duì)象名稱=open(filename[,mode][,buffering])其中:open()函數(shù)常用形式是接收兩個(gè)參數(shù):文件名(filename)和模式(mode)。文件名不可缺少,模式缺省值為mode='r'。完整的語法格式和參數(shù)默認(rèn)值為:open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)參數(shù)說明:((藍(lán)色的常用參數(shù))filename:要訪問的文件名稱的字符串值。要包含準(zhǔn)確的路徑信息(相對(duì)或者絕對(duì)路徑)。mode:mode決定了打開文件的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個(gè)參數(shù)是非強(qiáng)制的,默認(rèn)文件訪問模式為只讀(r)。buffering:指定了讀寫文件的緩存模式。0表示不緩存(僅在二進(jìn)制模式下允許),1表示緩存(僅在文本模式下可用),如大于1則表示緩沖區(qū)的大小。默認(rèn)值是緩存模式。如果取負(fù)值,寄存區(qū)的緩沖大小則為系統(tǒng)默認(rèn)。4.1Python語言之文件操作encoding:指定對(duì)文本進(jìn)行編碼和解碼的方式,只適用于文本模式,可以使用Python支持的任何格式,如GBK、utf8、CP936等等。errors:報(bào)錯(cuò)級(jí)別。參數(shù)errors是一個(gè)可選字符串,指定如何處理編碼和解碼錯(cuò)誤。只在文本模式下使用。newline:
區(qū)分換行符。參數(shù)newline控制通用換行符模式的工作原理。僅適用于文本模式。取值可以是None、''、'\n'、'\r'、'\r\n'。如果newline為None,則啟用通用換行符模式。closefd:傳入的file參數(shù)類型。如果closefd是False并且給出的是文件描述器而不是文件名,則當(dāng)文件關(guān)閉時(shí),基本文件描述器將保持打開。如果給定文件名,則closefd必須為True(默認(rèn)值),否則將產(chǎn)生錯(cuò)誤。opener:通過傳遞可調(diào)用對(duì)象opener可以使用自定義開啟器。注意:(1)執(zhí)行正常,open()函數(shù)返回1個(gè)文件對(duì)象,通過該文件對(duì)象對(duì)文件進(jìn)行讀寫;(2)創(chuàng)建文件對(duì)象失敗則拋出異常;(3)文件內(nèi)容操作完以后,一定要關(guān)閉文件對(duì)象;(4)即使寫了關(guān)閉文件的代碼,也無法保證文件一定能夠正常關(guān)閉。例如,如果在打開文件之后和關(guān)閉文件之前發(fā)生了錯(cuò)誤導(dǎo)致程序崩潰,這時(shí)文件就無法正常關(guān)閉。4.1Python語言之文件操作(5)在管理文件對(duì)象時(shí)推薦使用with關(guān)鍵字,可以有效地避免這個(gè)問題。withopen()語句的用法如下:withopen(filename,mode,[encoding])as文件對(duì)象:
文件操作程序模塊使用with上下文管理模式,可以自動(dòng)管理資源。不論何種因素跳出with塊,文件都可以被正常關(guān)閉。2、文件打開模式mode參數(shù)在打開文件的操作模式中,通過mode參數(shù)設(shè)置文件的打開方式,見表4-1文件操作方式。4.1Python語言之文件操作模式描
述r以只讀方式打開文件。文件的指針將會(huì)放在文件的開頭。這是默認(rèn)模式。rb以二進(jìn)制格式打開一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開頭。這是默認(rèn)模式。r+打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭。表4-1文件操作方式rb+以二進(jìn)制格式打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭。w打開一個(gè)文件只用于寫入。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。wb以二進(jìn)制格式打開一個(gè)文件只用于寫入。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。w+打開一個(gè)文件用于讀寫。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。wb+以二進(jìn)制格式打開一個(gè)文件用于讀寫。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。a打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入。ab以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入。a+打開一個(gè)文件用于讀寫。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開時(shí)會(huì)是追加模式。如果該文件不存在,創(chuàng)建新文件用于讀寫。ab+以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫。4.1Python語言之文件操作3、file對(duì)象方法通過文件的open()方法打開一個(gè)文件對(duì)象,可以通過文件對(duì)象提供的方法進(jìn)行讀取數(shù)據(jù)或?qū)懭霐?shù)據(jù)等文件操作。表4-2為文件對(duì)象的常用方法。4.1Python語言之文件操作方
法描
述f.close()關(guān)閉文件。關(guān)閉后文件不能再進(jìn)行讀寫操作。f.flush()刷新文件內(nèi)部緩沖,直接把內(nèi)部緩沖區(qū)的數(shù)據(jù)立刻寫入文件,而不是被動(dòng)的等待輸出緩沖區(qū)寫入。f.fileno()返回一個(gè)整型的文件描述符(filedescriptorFD整型),可以用在如os模塊的read方法等一些底層操作上。f.next()返回文件下一行。f.read([size])從文件讀取指定的字節(jié)數(shù),如果未給定或?yàn)樨?fù)則讀取所有。f.readline()讀取整行,包括
"\n"字符。f.readlines()讀取所有行并返回列表,若給定sizeint>0,則是設(shè)置一次讀多少字節(jié),這是為了減輕讀取壓力。f.seek(offset[,where])把文件指針移動(dòng)到相對(duì)于where的offset位置,where為0表示文件開始處,這是默認(rèn)值;1是表示當(dāng)前位置;2是表示文件結(jié)尾。f.tell()返回文件當(dāng)前指針位置。f.write(str)將字符串寫入文件,返回的是寫入的字符長度。f.writelines(seq)向文件寫入一個(gè)字符串列表,如果需要換行則要自己加入每行的換行符。表4-2文件對(duì)象常用方法4、關(guān)閉文件close()方法文件打開后,完成讀寫等操作后,必須進(jìn)行關(guān)閉操作,釋放文件對(duì)象以供別的程序使用同時(shí)也可以避免文件中數(shù)據(jù)的丟失。關(guān)閉文件使用文件對(duì)象的close()方法關(guān)閉文件。語法格式為:f.close()close()方法用于關(guān)閉已打開的文件,將緩沖區(qū)中尚未存盤的數(shù)據(jù)寫入磁盤,并釋放文件對(duì)象。如果后面的程序繼續(xù)使用這個(gè)文件,則必須重新打開。4.1Python語言之文件操作
文本文件是指以ASCII碼方式存儲(chǔ)的文件,文本文件中除了存儲(chǔ)文件有效字符信息外,不能存儲(chǔ)其他任何形式的數(shù)據(jù)信息。文件的操作一般包括從文件中讀取數(shù)據(jù)操作進(jìn)緩存區(qū),或?qū)⒕彺鎱^(qū)中的數(shù)據(jù)寫入文件中。1、文件讀取Python對(duì)文件的操作通過調(diào)用文件對(duì)象的方法來實(shí)現(xiàn)的,文件對(duì)象提供了read()、readline()和readlines()三個(gè)方法用于讀取文件內(nèi)容。Read()方法:read()方法的用法為:
變量=文件對(duì)象.read([size])。
其功能是讀取從當(dāng)前位置開始讀取size個(gè)字符,并作為字符串返回,賦值給變量。如果size的值大于文件當(dāng)前位置到文件尾的字符數(shù),則讀到文件尾結(jié)束。如果沒有給出size參數(shù),其功能是讀取從當(dāng)前位置直到文件末尾的內(nèi)容。如果是剛打開的文件,則是讀取整個(gè)文件的內(nèi)容。4.1.2文本文件的操作readline()方法:readline()方法的用法為:變量=文件對(duì)象.readline()。
其功能是讀取當(dāng)前文件位置指針指向的文件當(dāng)前行,包括行結(jié)束符。如果當(dāng)前指針位于文件尾,則返回空串。readlines()方法:readlines()方法的用法為:
變量=文件對(duì)象.readlines()。
其功能是讀取從當(dāng)前位置到文件尾的所有行,并將讀取的所有行字符串?dāng)?shù)據(jù)構(gòu)成列表返回,賦值給變量。文件中的每一行構(gòu)成列表中的一個(gè)元素。如果指針位置在文件尾,則返回一個(gè)空列表。例4-1:已經(jīng)建立一個(gè)data.txt文件,統(tǒng)計(jì)文件中的大寫字符的個(gè)數(shù)。#用read()實(shí)現(xiàn)f=open('data.txt','r')strs=f.read()#讀出所有的n=04.1.2文本文件的操作forcinstrs:if'a'<c<'z':n=n+1print(n)f.close()#用readline()實(shí)現(xiàn)f=open('data.txt','r')strs=f.readline()#讀出一行n=0whilestrs!='':forcinstrs:if'a'<c<'z':n=n+1strs=f.readline()#讀下一行print(n)f.close()4.1.2文本文件的操作#用readlines()實(shí)現(xiàn)f=open('data.txt','r')liststr=f.readlines()#讀出一行n=0forstrinliststr:#讀取列表中的每一行
forcinstr:#讀取一行中的字符
if'a'<c<'z':n=n+1print(n)f.close()2、文件的數(shù)據(jù)寫入寫文件是將內(nèi)存中的數(shù)據(jù)寫入磁盤文件中。Python文件對(duì)象提供了兩種寫文件的方法:write()方法和writelines()方法。write()方法:write()方法的用法為:
文件對(duì)象.write(str)
其功能是在文件的當(dāng)前位置寫入字符串str并返回字符串的個(gè)數(shù)。特別注意的是:write()方法執(zhí)行完后并沒有換行功能,如果需要換行則在字符串最后加上換行符“\n”。(2)writelines()方法:writelines()方法的用法為:
文件對(duì)象.writelines(字符串元素的列表)
其功能是在文件的當(dāng)前位置處依次寫入列表中的所有字符串元素。writelines()方法接收一個(gè)字符串列表作為參數(shù),將它們寫入文件,它也不能自動(dòng)加上換行符,如果需要,必須在列表中需要換行位置的每一行字符串結(jié)尾處加上換行符“\n”。4.1.2文本文件的操作例4-2:從鍵盤輸入若干字符,將他們寫入文件sample.txt。然后從該文件中讀出文件內(nèi)容,并在屏幕上顯示出來。#write()方法print("======write()==========")y='yes'withopen('sample.txt','a+')asfp:#追加模式打開
whiley=='yes'ory=='y'ory=='Y':s=input("輸入要寫入的文件內(nèi)容:")s=s+"\n"fp.write(s)y=input("是否繼續(xù)輸入(yes/y/Y):")else:print("輸入結(jié)束")fp.close()withopen('sample.txt','r')asfp:print(fp.read())4.1.2文本文件的操作#writelines()方法print("======writelines()==========")y='yes'lst=[]whiley=='yes'ory=='y'ory=='Y':s=input("輸入要寫入的文件內(nèi)容:")s=s+"\n"lst.append(s)y=input("是否繼續(xù)輸入(yes/y/Y):")else:print("輸入結(jié)束")withopen('sample.txt','a+')asfp:fp.writelines(lst)fp.close()withopen('sample.txt','r')asfp:print(fp.readlines())4.1.2文本文件的操作注意:(1)若寫入的文件不存在,函數(shù)open()將自動(dòng)創(chuàng)建。以w寫入模式打開文件時(shí),每次寫入都會(huì)清空之前內(nèi)容,寫入新的內(nèi)容。(2)寫入必須是字符串格式,如果不是字符串,寫入前需轉(zhuǎn)為字符串格式(3)函數(shù)write()不會(huì)在寫入文本末尾自動(dòng)換行,如果要換行,需添加換行符(4)寫入中文,設(shè)置encoding='utf-8',如“withopen('1.txt','w',encoding='utf-8')asf:”。1、文件中列表數(shù)據(jù)的讀寫Python語言雖然提供了readlines()和writelines()語法,可以實(shí)現(xiàn)字符串元素列表的操作,但這兩個(gè)命令讀寫的都必須是["python","c++","java"]這種形式的列表。如下列的列表按照readlines()和writelines()方法寫入文件中:例4-3:文件中列表數(shù)據(jù)讀寫。data=[['a','b','c'],['a','b','c'],['a','b','c']]lst=["python","c++","java"]withopen("1.txt","w")asf:f.writelines(lst)foriindata:f.writelines(i)withopen("1.txt","r")asf:print(f.readlines())運(yùn)行的結(jié)果為:['pythonc++javaabcabcabc']4.1.3列表和字典的讀寫這樣的結(jié)果,如果要恢復(fù)原來的數(shù)據(jù)結(jié)構(gòu)形式,將無法進(jìn)行分割恢復(fù)。如何恢復(fù)復(fù)雜列表數(shù)據(jù)的文件讀寫,可以使用str()和split()以及eval()函數(shù),將列表轉(zhuǎn)換成字符串加上換行符’\n’,寫入文件;讀出時(shí),使用split(’\n’)作為分隔符,返回字符串?dāng)?shù)據(jù);在使用eval()將字符串轉(zhuǎn)換為列表。其中要注意去除空字符串。程序如下:4.1.3列表和字典的讀寫withopen("2.txt","w")asf:f.write(str(lst)+'\n')foriindata:f.write(str(i)+'\n')withopen("2.txt","r")asf:res=f.read()f.close()
lststr=res.split('\n')print("lststr=",lststr)forsinlststr:ifs!='':lst1=eval(s)print(lst1,type(lst1))輸出結(jié)果:lststr=["['python','c++','java']","['a','b','c']","['a','b','c']","['a','b','c']",'']['python','c++','java']<class'list'>['a','b','c']<class'list'>['a','b','c']<class'list'>['a','b','c']<class'list'>2、文件中讀寫字典Python語言中沒有提供字典數(shù)據(jù)寫入文本文件的功能,如果將字典數(shù)據(jù)寫入文本文件和讀出數(shù)據(jù)并恢復(fù)為字典數(shù)據(jù),可以通過一下兩個(gè)方法完成。以下列字典數(shù)據(jù)為例:d={"nhy":"123456","ylm":"456789","abc":123,"city":"shanghai","skill":"js"}(1)使用json轉(zhuǎn)換方法字典寫入txt。使用json.dumps把字典轉(zhuǎn)成json串寫入文件。importjsonres=json.dumps(d,indent=4,ensure_ascii=False)#把字典轉(zhuǎn)成json串f=open('test.txt','w',encoding='utf-8')f.write(res)f.close()讀取txt中的字典。使用json.loads把文本文件中的json串轉(zhuǎn)成字典。4.1.3列表和字典的讀寫f=open('test.txt')res=f.read()print('res的類型',res,type(res))d=json.loads(res)#把json串轉(zhuǎn)成字典print("d=json.loads(res)=",d)f.close()(2)使用str和eval函數(shù)轉(zhuǎn)換方法(也適用于列表)。字典寫入txt。使用str函數(shù)將字典轉(zhuǎn)化為字符串,寫入文件。fw=open("test.txt",'w+')fw.write(str(dic))#把字典轉(zhuǎn)化為strfw.close()讀取txt中字典。使用eval函數(shù)將讀取的文本文件中的字符串轉(zhuǎn)換為字典類型。fr=open("test.txt",'r+')dic=eval(fr.read())#讀取的str轉(zhuǎn)換為字典print(dic)fr.close()4.1.3列表和字典的讀寫4.2.1CSV簡介CSV是引文Comma-SeparatedValue即逗號(hào)分隔值的縮寫,因分隔符沒有嚴(yán)格的要求,可以使用逗號(hào),也可以使用其他字符(如制表符\t,分號(hào)等),所以CSV也被稱為逗號(hào)分隔或者其他字符分隔值。CSV文件是使用純文本來存儲(chǔ)表格數(shù)據(jù),只能存儲(chǔ)文本,不能存儲(chǔ)二進(jìn)制信息。CSV是一種通用的、相對(duì)簡單的文件格式,最廣泛的應(yīng)用是在程序之間轉(zhuǎn)移表格數(shù)據(jù),而這些程序本身是在不兼容的格式上進(jìn)行操作的,因?yàn)榇罅砍绦蚨贾С帜撤NCSV文件,所以CSV文件可作為一種中間的輸入/輸出格式,它可以很容易地被導(dǎo)入各種表格及數(shù)據(jù)庫中。CSV文件用記事本和Excel都能打開,用記事本打開顯示逗號(hào),用Excel打開,逗號(hào)被用作了分列符號(hào)。文件后綴為“.csv”。4.2CSV格式文件處理2、CSV的界面操作CSV文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本)。純文本意味著該文件是一個(gè)字符序列,每個(gè)字符都是默認(rèn)以逗號(hào)分隔。在Windows系統(tǒng)環(huán)境中,可以像word、execl等文本文件一樣編輯。(1)打開方式:.csv文件打開方式有多種,如記事本、Excel、Wordpad等,只要是文本編輯器都能正確打開。(2)創(chuàng)建方式:使用記事本或Excel創(chuàng)建CSV文件。新建文件,按文本或Excel文件進(jìn)行編輯。注意:在記事本中編輯時(shí),關(guān)鍵字與關(guān)鍵字之間使用英文逗號(hào)隔開,第一行為引用字段,第二行為對(duì)應(yīng)值。生成.csv文件。方式一:記事本:文件-另存為-命名文件名-選擇編碼utf-8,最后保存;Excel:另存為-其它格式-選擇文件類型-命名文件名,最后保存。方式二:保存文檔后直接修改文件后綴為“.csv”。4.2CSV格式文件處理3、文件格式
CSV文件是一種常用的數(shù)據(jù)交換格式。既可以使用記事本打開,也可以使用Excel文件打開。CSV文件數(shù)據(jù)都是字符型文本,但又區(qū)別于TXT文件的無格式,CSV文件可以設(shè)計(jì)表頭,有一定的數(shù)據(jù)格式。如是界面操作,內(nèi)容有以下的特殊格式字符,建議使用Excel編輯。下面我們介紹一下CSV文件的基本格式:(1)每條記錄占一行,以逗號(hào)為分隔符,逗號(hào)分隔的部分稱為字段;(2)逗號(hào)前后的字段中的空格會(huì)被忽略;(3)字段中如包含有逗號(hào)、換行符、空格,該字段必須用雙引號(hào)括起來;(4)字段中如包含雙引號(hào),則用兩個(gè)雙引號(hào)表示;(5)第一條記錄,可以是字段名。4.2CSV格式文件處理python3CSV模塊中主要的方法是實(shí)現(xiàn)對(duì)CSV的讀寫操作與格式轉(zhuǎn)換。python3.x集成了對(duì)CSV文件的操作,直接引入CSV包即可。1、使用csv庫使用csv庫前,先導(dǎo)入csv庫:importcsv。2、文件的打開與關(guān)閉(1)open()(withopen)方法這兩個(gè)方法和python文件操作中的功能一樣,都是實(shí)現(xiàn)打開文件的功能。使用open()將創(chuàng)建一個(gè)csv對(duì)象。語法使用示例如:csvfile=open('例421.csv',’r’,newline='')#讀方式打開csvfile=open('例421.csv',’w’,newline='')#寫方式打開或等價(jià):withopen('例421.csv',’r’,newline='')ascsvfilewithopen('例421.csv',’w’,newline='')ascsvfile4.2.2python3CSV模塊常用類與方法注意:在CSV文件操作中,涉及中文的讀寫時(shí),需加上參數(shù)“encoding='utf-8-sig'”。打開csv文件需要添加一個(gè)參數(shù)newline=”,避免出現(xiàn)空行的狀態(tài)。(2)csvfile.close()方法:關(guān)閉打開的CSV對(duì)象csvfile。csv文件提供了兩類的讀寫操作,一是csv.reader()和csv.writer()方法;二是提供了字典方式讀寫類:csv.DictReader()、csv.DictWriter()。下面我們將介紹兩類讀寫操作的語法與使用。4.2.2python3CSV模塊常用類與方法3、csv文件讀操作:csv.reader()和csv.DictReader()(1)csv.reader()方法csv_reader=csv.reader(iterable[,dialect='excel'][,**fmtparams])其中參數(shù):iterable:是任何可迭代對(duì)象,可以為每次迭代生成一個(gè)完整的文本行。返回的reader對(duì)象“csv_reader”是一個(gè)迭代程序,可以為每次迭代生成一列字符串。dialect:可以缺省,缺省值為dialect='excel';dialect參數(shù)的目的主要是處理不同CSV編碼之間的差異。該模塊僅支持兩個(gè)內(nèi)置方言—'excel'和'excel-tab’,可以缺省,缺省值為dialect='excel';但用戶可以定義其他方言。**fmtparams:格式化參數(shù),可缺省。用來覆蓋之前dialect對(duì)象指定的編碼風(fēng)格。4.2.2python3CSV模塊常用類與方法(2)csv.DictReader()類csv_reader=csv.DictReader(f[,fieldnames=None,restkey=None,restval=None,dialect='excel',**fmtparams])csv.DictReader()的功能是將讀取的信息映射到字典中。
該字典的鍵由可選的參數(shù)fieldnames指定。如果省略fieldnames參數(shù),則csvfile第一行中的值將用作字段名。在介紹參數(shù)之前,我們來了解一下csv文件的格式。如圖4-1所示。4.2.2python3CSV模塊常用類與方法在圖4-1所示的csv文件中,DictReader會(huì)將第一行的內(nèi)容(類標(biāo)題)作為字典的key值,第二行開始才是對(duì)應(yīng)的字典value數(shù)據(jù)內(nèi)容。即圖中的csv文件有2列7行數(shù)據(jù),第一列的key值為first_name,第二列的key值為last_name。csv.DictReader()的參數(shù):f:為讀取的文件對(duì)象;fieldnames:指定在返回的字典中用作鍵的字段名稱。如果忽略該參數(shù),將從輸入文件的第一行取得字典鍵名稱。默認(rèn)值為fieldnames=None;restkey:提供用來存儲(chǔ)超額數(shù)據(jù)的字典鍵名稱,例如,行的數(shù)據(jù)字段比字段名稱多時(shí)可以指定該參數(shù)。默認(rèn)值為restkey=None;restva:指定輸入中缺少值的字段的默認(rèn)值,在行中沒有足夠的字段時(shí)可以指定該參數(shù),默認(rèn)值為restval=None;dialect和fmtparams的含義與reader()中的同名參數(shù)含義相同。4.2.2python3CSV模塊常用類與方法例4-5:讀取names.csv中的數(shù)據(jù)。importcsvdefreader_n(file):#行讀
withopen(file,'r',newline='')ascsv_file:csv_reader=csv.reader(csv_file)forrowincsv_reader:print("row=",row,";row的類型=",type(row))csv_file.close()defread_col(file):#列讀
withopen(file,"r")asfp:reader=csv.reader(fp)#reader是一個(gè)迭代器
next(reader)#如果不需要輸出標(biāo)題,可以next()方法,把迭代器往下挪
forxinreader:#這樣通過下標(biāo)的方式去獲取
first_name=x[0]last_name=x[1]print({"first_name":first_name,"last_name":last_name})fp.close()4.2.2python3CSV模塊常用類與方法defD_reader(file):#字典讀
withopen(file,'r')ascsv_file:csv_reader1=csv.DictReader(csv_file)ford_rowincsv_reader1:print("d_row=",d_row,"\n"+"d_row的類型=",type(d_row))csv_file.close()reader_n('names.csv')read_col('names.csv')D_reader('names.csv')從輸出結(jié)果中可以發(fā)現(xiàn),可用for循環(huán)迭代輸出每一行數(shù)據(jù),輸出的數(shù)據(jù)類型分別為備注:在版本3.6中更改:現(xiàn)在返回的行類型為OrderedDict。在版本3.8中更改:現(xiàn)在返回的行的類型為dict。列表和字典類型。4.2.2python3CSV模塊常用類與方法4、csv文件寫操作:csv.writer()和csv.DictWriter()(1)csv.writer()方法csv_writer=csv.writer(csvfile,[,dialect='excel',**fmtparams])csv.writer()的功能是返回一個(gè)csv文件寫入(writer)對(duì)象。返回的writer對(duì)象如“csv_writer”提供兩個(gè)方法完成數(shù)據(jù)寫入:csv_writer.writerow(row):將row行參數(shù)寫入到文件對(duì)象,并根據(jù)當(dāng)前的方言格式化;csv_writer.writerows(rows):將rows中的所有元素,行對(duì)象的迭代寫入到文件對(duì)象。一次寫入多行數(shù)據(jù)。4.2.2python3CSV模塊常用類與方法(2)csv.DictWriter()方法:csv_writer=csv.DictWriter(fileobj,fieldnames[,restval='',extrasaction='raise',dialect='excel',*args,**kwds])csv.DictWriter()方法的功能是創(chuàng)建一個(gè)字典形式的csv寫入對(duì)象。序列數(shù)據(jù)將按照fieldnames參數(shù)作為字典鍵key的順序被寫入。參數(shù):fileobj:寫入的文件對(duì)象;fieldnames:指定字典鍵key,列表數(shù)據(jù)類型;restval:可選的參數(shù)。如果字典字段名中的鍵缺少相應(yīng)的值時(shí),即寫入restval的值;extrasaction:如果傳遞給該writerow()方法在fieldnames中找不到的相應(yīng)的鍵,則可選的extrasaction參數(shù)指示要執(zhí)行的操作。如果將其默認(rèn)值設(shè)置為'raise',則拋出一個(gè)“ValueError”異常。如果設(shè)置為'ignore',字典中的多余值將被忽略。其他任何可選參數(shù)等同與writer()方法。請(qǐng)注意,與DictReader類不同,該類的fieldnames參數(shù)DictWriter不是可選的。4.2.2python3CSV模塊常用類與方法返回的DictWriter對(duì)象如“csv_writer”提供三個(gè)方法完成數(shù)據(jù)寫入:csv_writer.writerow(row)和csv_writer.writerows(rows):功能與csv.writer()方法相同;csv_writer.writeheader():將對(duì)象csv.DictWriter(fileobj,fieldnames)中“fieldnames”作為文件頭寫入文件作為字段名,只適用于DictWriter對(duì)象。例4-6:寫入數(shù)據(jù)到csv文件中。importcsv#DictWriterwithopen('names.csv','w',newline='')ascsvfile:fieldnames=['first_name','last_name']writer=csv.DictWriter(csvfile,fieldnames=fieldnames)writer.writeheader()4.2.2python3CSV模塊常用類與方法writer.writerow({'first_name':'Baked','last_name':'Beans'})writer.writerow({'first_name':'Lovely','last_name':'Spam'})writer.writerow({'first_name':'Wonderful','last_name':123})#writerowsNamelist=[{'first_name':'王平','last_name':'王小二'},{'first_name':'李華','last_name':'梨花'},{'first_name':'君川','last_name':'駿川'}]writer.writerows(namelist)csvfile.close()#writerwithopen('names.csv','a',newline='')ascsvfile:spamwriter=csv.writer(csvfilefieldn=['姓名','小花']spamwriter.writerow(fieldn)spamwriter.writerow(['Spam']*5+['BakedBeans'])spamwriter.writerow(['Spam','LovelySpam','WonderfulSpam'])csvfile.close()4.2.2python3CSV模塊常用類與方法針對(duì)最后兩條的寫入,數(shù)據(jù)值的數(shù)量比“fieldnames=['first_name','last_name']”的字段數(shù)量多的情況下,可以看見字典類型的輸出結(jié)果為:d_row={'first_name':'Spam',None:['Spam','Spam','Spam','BakedBeans'],'last_name':'Spam'}d_row={'first_name':'Spam',None:['WonderfulSpam'],'last_name':'LovelySpam'}4.2.2python3CSV模塊常用類與方法注意:寫入數(shù)據(jù)時(shí),非字符串類型的數(shù)據(jù)會(huì)被str()成字符串存儲(chǔ)。寫入數(shù)據(jù)到csv文件時(shí),如果csvfiel是一個(gè)文件對(duì)象,應(yīng)該用newline=''指定換行符。默認(rèn)的情況下,讀和寫使用逗號(hào)做分隔符(delimiter),用雙引號(hào)(")作為引用符,當(dāng)遇到特殊情況時(shí),可以根據(jù)需要手動(dòng)指定字符,例如:importcsvwithopen('names.csv','r')asf:reader=csv.reader(f,delimiter=':',quoting=csv.QUOTE_NONE)forrowinreader:print(row)上述示例指定“:”冒號(hào)作為分隔符,并且指定引用“quoting“方式為不引用。這意味著讀的時(shí)候都認(rèn)為內(nèi)容是不被默認(rèn)引用符(")包圍的。4.2.2python3CSV模塊常用類與方法例4-7:爬取豆瓣讀書的圖書網(wǎng)頁,提取作者、譯者、出版社、單價(jià)、出版年份、讀者評(píng)分等信息,寫入csv文件中。在本案例中,我們打開豆瓣,找到需要提取的網(wǎng)頁,打開網(wǎng)頁查看html代碼,可以發(fā)現(xiàn),豆瓣讀書的圖書分類索引頁/tag/的html代碼,使用bs4的select()定位方法“tags=soup.select('#contentdivdivtabletbodytrtda')”找到每一類的圖書索引地址:url=[]fortagintags:tag=tag.get_text()href='/tag/'pageurl=href+str(tag)url.append(pageurl)4.2.3應(yīng)用案例然后找到每一類的網(wǎng)頁如小說的網(wǎng)頁,打開網(wǎng)頁的html代碼,找到需要提取的信息部分的代碼,同樣,使用bs4的select()方法定位到有效位置,提取所有的有效信息,如“booknames=soup.select(‘div#subject_list>ul.subject-list>li.subject-item>>h2>a’)”。完整代碼見例4-7。JSON,全稱為JavaScriptObjectNotation,也就是JavaScript對(duì)象標(biāo)記,它通過對(duì)象和數(shù)組的組合來表示數(shù)據(jù),構(gòu)造簡潔但是結(jié)構(gòu)化程度非常高,是一種輕量級(jí)的數(shù)據(jù)交換格式。通過爬蟲從網(wǎng)頁中提取的信息,很多是JavaScript語言描述的數(shù)據(jù),應(yīng)用json格式的文件存儲(chǔ)有時(shí)更便利。JSON文件的后綴名為.json。JSON文件可以用記事本、瀏覽器打開,也可以利用文件編輯器打開。4.3JSON文件格式在JSON中,值必須是以下數(shù)據(jù)類型之一:字符串、數(shù)字、對(duì)象(JSON對(duì)象)、數(shù)組、布爾、Null。JSON的值不可以是以下數(shù)據(jù)類型之一:函數(shù)、日期、Undefined(未定義類型)。1、JSON字符串和JSON數(shù)字JSON中的字符串必須用雙引號(hào)包圍。JSON中的數(shù)字必須是整數(shù)或浮點(diǎn)數(shù)。如:{"name":"John"};{"age":30}2、JSON對(duì)象JSON對(duì)象在花括號(hào)中書寫,對(duì)象可以包含多個(gè)名稱/值對(duì):如:{"firstName":"John","lastName":"Doe"},等價(jià)于JavaScrip中的:firstName="John"lastName="Doe"4.3.1JSON數(shù)據(jù)類型3、JSON數(shù)組JSON數(shù)組用方括號(hào)[]表示,數(shù)組可包含多個(gè)對(duì)象。如我們定義一個(gè)名稱為"employees"的JSON對(duì)象,有多個(gè)值組成,多值可以使用數(shù)組表示:{"employees":[{"firstName":"John","lastName":"Doe"},{"firstName":"Anna","lastName":"Smith"},{"firstName":"Peter","lastName":"Jones"}]}在上面的例子中,對(duì)象"employees"是包含三個(gè)對(duì)象的數(shù)組。每個(gè)對(duì)象代表一條關(guān)于某人(有姓和名)的記錄。4.3.1JSON數(shù)據(jù)類型4、JSON布爾和JSONNull在JSON中,值可以是布爾值、Null值。JSON布爾值可以是True或False。如:{"sale":True};{"middlename":Null}。4.3.1JSON數(shù)據(jù)類型使用pythondejson庫時(shí)需要先導(dǎo)入json庫:importjsonPython語言中提供了json庫實(shí)現(xiàn)數(shù)據(jù)格式的轉(zhuǎn)換功能。在json模塊中主要有4個(gè)方法如表4-3所示:load()、loads()、dump()、dumps()。4.3.2Python的JSON庫函數(shù)描述json.dumps()將
Python對(duì)象編碼成
JSON字符串。json.dump()將
Python對(duì)象編碼成
JSON字符串,并寫入文件。json.loads()將已編碼的
JSON字符串解碼為
Python對(duì)象。json.load()從JSON文件中讀取JSON字符串,并將JSON字符串解碼為
Python對(duì)象。1、json.dumps()方法:將Python對(duì)象編碼成JSON字符串。語法:json_str=json.dumps(obj[,skipkeys=False,ensure_ascii=True,check_circular=True,allow_nan=True,cls=None,indent=None,separators=None,encoding="utf-8",default=None,sort_keys=False,**kw])obj:python數(shù)據(jù)對(duì)象,即需要轉(zhuǎn)換的數(shù)據(jù)對(duì)象;skipkeys:在encoding編碼過程中,字典dict對(duì)象的key只可以是字符串str對(duì)象,如果是其他類型,那么在編碼過程中就會(huì)拋出ValueError的異常。skipkeys可以跳過那些非str對(duì)象當(dāng)作key的處理;indent:定義數(shù)據(jù)縮進(jìn)顯示格式。indent的值,代表縮進(jìn)空格。應(yīng)該是一個(gè)非負(fù)的整型,如果是0,或者為空,則按一行顯示數(shù)據(jù);否則會(huì)換行且按照indent的數(shù)量顯示前面的空白;sort_keys:將數(shù)據(jù)按照字典key排序(a到z)進(jìn)行排序輸出;ensure_ascii:解碼方式,默認(rèn)True是ASCII碼。如輸出中文此參數(shù)設(shè)為“ensure_ascii=False”。4.3.2Python的JSON庫2、json.dump()方法:將python對(duì)象編碼成JSON字符串后寫入到參數(shù)“fp”對(duì)象。語法:dump(obj,fp[,……])json.dump()方法的參數(shù)比json.dumps()多了一個(gè)“fp”對(duì)象,“fp”一般為文件對(duì)象。其他參數(shù)同json.dumps()。3、將python對(duì)象寫入JSON文件:下面分別用兩種方法將數(shù)據(jù)寫入json文件。例4-8:將數(shù)據(jù)寫入json文件。importjsondata={"employees":[{"firstName":"John","lastName":"Doe"},{"firstName":"Anna","lastName":"Smith"},{"firstName":"Peter","lastName":"Jones"}]}4.3.2Python的JSON庫#利用dumps()方法,調(diào)用python文件操作的write()方法寫入文本。defw_dps(file):withopen(file,'w')asf:jdata=json.dumps(data)f.write(jdata)f.close()#dump()方法defw_dp(file):withopen(file,'w')asf:json.dump(data,f)f.close()w_dps("js.json")w_dp("js1.json")4.3.2Python的JSON庫4、json.loads()方法:JSON字符串轉(zhuǎn)換成python數(shù)據(jù)類型。pobj=json.loads(s[,encoding=None,cls=None,object_hook=None,parse_float=None,parse_int=None,parse_constant=None,object_pairs_hook=None,**kw])參數(shù):s:把一個(gè)字符串反序列化為Python對(duì)象;object_hook:可選參數(shù)。它會(huì)將(loads的)返回結(jié)果(一般是字典)替換為指定的類型;object_pairs_hook:可選參數(shù)。它會(huì)將結(jié)果以鍵值對(duì)(key-value)有序列表的形式返回。如果object_hook和object_pairs_hook同時(shí)指定,則優(yōu)先返回object_pairs_hook;parse_float:可選參數(shù)。設(shè)置這個(gè)參數(shù)后,在解碼json字符串的時(shí)候,符合float類型的字符串將被轉(zhuǎn)設(shè)定的類型,如parse_float=decimal.Decimal;parse_int:可選參數(shù)。設(shè)置這個(gè)參數(shù)后,在解碼json字符串的時(shí)候,符合int類型的字符串將被轉(zhuǎn)為設(shè)定的類型,如p=json.loads("123",parse_int=float)。4.3.2Python的JSON庫在json的編解碼過程中,python的原始類型與json類型會(huì)相互轉(zhuǎn)換,具體的轉(zhuǎn)化對(duì)照如表4-5所示:4.3.2Python的JSON庫JSON數(shù)據(jù)Python數(shù)據(jù)Object對(duì)象Dict字典Array數(shù)組List列表String字符串Str字符串number(int)整數(shù)字符Int整數(shù)number(real)實(shí)數(shù)字符Float浮點(diǎn)數(shù)trueTruefalseFalsenullNone5、json.load()方法語法:pobj=json.load(fp[,encoding=None,cls=None,object_hook=None,parse_float=None,parse_int=None,parse_constant=None,object_pairs_hook=None,**kw])json.load()方法的功能是將json文件流中的數(shù)據(jù),讀取出來并轉(zhuǎn)換成對(duì)應(yīng)的python數(shù)據(jù)類型。對(duì)于json.loads()方法來說,輸入的“s”是一個(gè)字符串;而對(duì)于json.load()方法來說,輸入的“fp”是一個(gè)數(shù)據(jù)流文件。兩個(gè)方法只是處理的數(shù)據(jù)源不同,其他的參數(shù)都是相同的,返回的結(jié)果類型也相同。4.3.2Python的JSON庫例4-9:將字符串?dāng)?shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)的Python數(shù)據(jù)類型,寫入文件并讀取。importjsonfromcollectionsimportOrderedDict#collections是一個(gè)python的內(nèi)建模塊,有序字典輸出str1="""[{"姓名":"lisha","性別":"male","年齡":"46"},{"姓名":"jhon","性別":"female","年齡":"44"}]"""jdata=json.loads(str1,object_pairs_hook=OrderedDict)#將json格式字符串輸出原有順序print("jdata=",jdata)print("jdata的數(shù)據(jù)類型=",type(jdata))print("第一項(xiàng)的姓名=",jdata[0]['姓名'])print("第一項(xiàng)的姓名=",jdata[0].get('姓名'))4.3.2Python的JSON庫withopen('data.json','w')asf:f.write(json.dumps(jdata))#jdata是json對(duì)象
#讀取數(shù)據(jù)withopen('data.json','r')asf:str2=f.read()jdata1=json.loads(str2)print("str2=",str2)print("jdata1=",jdata1)#=====或者用以下方式======withopen('data.json','w')asf:json.dump(jdata,f,ensure_ascii=False)withopen('data.json','r')asf:jdata2=json.load(f)print("jdata2=",jdata2)4.3.2Python的JSON庫在python3.x版本中,主要支持pymysql,同時(shí)mysql官方也給出mysql.connector插件,在python3.x也可以使用。下面本文將主要介紹Python中MySQLConnector模塊使用方法。pymysql的使用方法類似。4.4.1MySQLConnectorMySQLConnectorPython是一個(gè)用Python語言實(shí)現(xiàn)的MySQL戶端服務(wù)器的連接協(xié)議。該軟件包無需安裝任何MySQL的軟件。下面我們?cè)敿?xì)的介紹mysql-connector-python模塊,以便于在python中操作mysql數(shù)據(jù)庫。1、安裝可以直接使用pip來安裝mysql-connector-python模塊。在cmd窗口下,轉(zhuǎn)換到python的安裝目錄下,輸入寫命令行,成功安裝的提示如圖4-2:4.4python與mysql數(shù)據(jù)庫pipinstallmysql-connector-python4.4python與mysql數(shù)據(jù)庫如果安裝不成功,也可以下載安裝。下載地址:/downloads/connector/python/。如下載版本文件“mysql-connector-python-8.0.15-py3.5-windows-x86-64bit.msi”,下載后根據(jù)提示安裝。注意:不要安裝這個(gè)分支模塊“pipinstallmysql-connector”,已經(jīng)停止更新。2、數(shù)據(jù)庫連接連接數(shù)據(jù)庫的代碼如下,其中的參數(shù)為數(shù)據(jù)庫的配置參數(shù):4.4python與mysql數(shù)據(jù)庫importmysql.connectorconfig={'host':'',#默認(rèn)。
'user':'root','password':'123456','port':3306,#默認(rèn)即為3306'database':'test','charset':'utf8'#默認(rèn)即為'utf8'}try:cnn=mysql.connector.connect(**config)exceptmysql.connector.Errorase:
print('connectfails!{}'.format(e))cur=cnn.cursor()#創(chuàng)建游標(biāo)4.4python與mysql數(shù)據(jù)庫3、數(shù)據(jù)庫操作
顯示所有數(shù)據(jù)庫、創(chuàng)建新的數(shù)據(jù)庫文件、指定當(dāng)前操作的數(shù)據(jù)庫以及刪除數(shù)據(jù)庫的操作。在mysql中的命令為:showdatabases;
#顯示所有數(shù)據(jù)庫createdatabaseifnotexistst1;
#數(shù)據(jù)庫不存在就創(chuàng)建數(shù)據(jù)庫t1usedatabaset1;
#指定當(dāng)前操作的數(shù)據(jù)庫為t1dropdatabaseifexistst1;
#刪除數(shù)據(jù)庫t1在python中的mysql.connector模塊中,操作為(默認(rèn)使用上述的數(shù)據(jù)庫鏈接和游標(biāo)):cur.execute('createdatabaseifnotexistst1')#創(chuàng)建數(shù)據(jù)t1cur.execute('SHOWDATABASES')#顯示服務(wù)器所有數(shù)據(jù)庫,大小寫都可以fordbincur.fetchall():#cur.fetchall(),提取游標(biāo)中的所有數(shù)據(jù)
print(db)#打印數(shù)據(jù)庫信息cur.execute('usedatabaset1')4.4python與mysql數(shù)據(jù)庫4、創(chuàng)建表和刪除表創(chuàng)建表:CREATETABLEifnotexists表名稱在我們指定對(duì)相應(yīng)的數(shù)據(jù)庫操作,如cur.execute('usedatabaset1')指定數(shù)據(jù)庫t1后,下面我們可以使用創(chuàng)建數(shù)據(jù)庫表操作,創(chuàng)建一張名為student的表,如下面的代碼將在t1數(shù)據(jù)庫下新建了一張名為“student”的表文件,在創(chuàng)建表之前,需要判斷一下表是否存在,以防止文件已存在報(bào)錯(cuò)。sql_create_table="""CREATETABLEifnotexistsstudent(idint(10)NOTNULLAUTO_INCREMENT,namevarchar(10)DEFAULTNULL,ageint(3)DEFAULTNULL,PRIMARYKEY(id))ENGINE=MyISAM"""try:
cur.execute(sql_create_table)
mit()exceptmysql.connector.Errorase:
print('createtablestudentfails!{}'.format(e))4.4.1MySQLConnector刪除表:DROPTABLEifexists表名稱cur.execute('showtables')foriincur.fetchall():sql="DROPTABLEIFEXISTS{}".format(i)
try:
cur.execute(sql)
mit()
print('table:{}--已被刪除'.format(i))exceptmysql.connector.Errorase:
p
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023八年級(jí)數(shù)學(xué)上冊(cè) 第14章 勾股定理14.1勾股定理 2直角三角形的判定教學(xué)實(shí)錄 (新版)華東師大版
- 2025保健品招商合同模板
- 2023九年級(jí)物理上冊(cè) 第三章 認(rèn)識(shí)電路3.3 電路的連接教學(xué)實(shí)錄 (新版)教科版
- 11變廢為寶有妙招 (教學(xué)設(shè)計(jì))-部編版道德與法治四年級(jí)上冊(cè)
- 七年級(jí)語文下冊(cè) 第四單元 15 我為少男少女們歌唱教學(xué)實(shí)錄 語文版
- 史記·陳涉世家
- 2025新希望兼職教師聘用合同
- 陜西省石泉縣七年級(jí)生物上冊(cè) 2.1.3 動(dòng)物細(xì)胞教學(xué)實(shí)錄1 (新版)新人教版
- 交通安全教育主題班會(huì)
- 2023八年級(jí)數(shù)學(xué)上冊(cè) 第十一章 三角形11.2 與三角形有關(guān)的角11.2.2 三角形的外角教學(xué)實(shí)錄(新版)新人教版
- 異麥芽糖酐鐵注射液-藥品臨床應(yīng)用解讀
- 【初中化學(xué)】常見的鹽(第1課時(shí)常見的鹽的性質(zhì)和用途)-2024-2025學(xué)年九年級(jí)化學(xué)人教版(2024)下冊(cè)
- 湖南省高二年級(jí)下冊(cè)期中聯(lián)考物理試題(原卷版)
- 2025年全國國家版圖知識(shí)競賽題庫及答案(中小學(xué)組)
- 智慧教室建設(shè)實(shí)施計(jì)劃方案
- 貨物驗(yàn)收單表格模板
- 工程機(jī)械設(shè)計(jì)-陳海虹課件第6章-制動(dòng)系
- GB 40165-2021固定式電子設(shè)備用鋰離子電池和電池組安全技術(shù)規(guī)范
- 工程質(zhì)保期滿驗(yàn)收?qǐng)?bào)告模板
- 滬科版初中物理:實(shí)驗(yàn)匯總
- 召回產(chǎn)品處理記錄表
評(píng)論
0/150
提交評(píng)論