《大數(shù)據(jù)的Python基礎》課件-第7章 文件操作_第1頁
《大數(shù)據(jù)的Python基礎》課件-第7章 文件操作_第2頁
《大數(shù)據(jù)的Python基礎》課件-第7章 文件操作_第3頁
《大數(shù)據(jù)的Python基礎》課件-第7章 文件操作_第4頁
《大數(shù)據(jù)的Python基礎》課件-第7章 文件操作_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章文件操作學習目標掌握文件的基本操作

掌握二進制文件的處理了解文件的系統(tǒng)操作

了解常見文件格式的讀寫22025/3/67.1文件基本操作32025/3/6文本文件可以用普通文本編輯器直接查看,通常是以字符串形式存在的字母、漢字和數(shù)字等。二進制文件則呈現(xiàn)了各種形態(tài),包括字處理文件、可執(zhí)行文件、圖像文件、音視頻文件等。文本文件二進制文件由于對數(shù)據(jù)的不同編碼計算機文件7.1.1文件對象42025/3/6文件對象從面相對象編程的特性上來看,Python對文件的操作也是通過文件對象來達成的。打開并創(chuàng)建文件對象的方法:open(file,mode=‘r’,buffering=-1,encoding=None,newline=None,closed=True,opener=None)file:file可以是字符串或字節(jié)對象,用于打開文件路徑名(絕對或相對當前工作目錄)或要打包文件的證書文件描述符。mode:mode是一個可選的字符串參數(shù),用來指定文件打開模式。7.1.1文件對象52025/3/6文件打開模式打開模式定義了打開文件后的處理方式,如只讀、讀寫、追加等。當對文件內(nèi)容操作完成以后,必須關閉文件,這樣能夠保證所做的修改得到保存。模式功能描述r只讀模式w寫模式,若存在則覆蓋原有內(nèi)容a追加模式r+讀寫,不創(chuàng)建w+讀寫,若不存在則新建a+追加模式但可讀rt,wt默認為文本方式,相當于r,wrb,wb讀寫二進制文件7.1.1文件對象62025/3/6海量性文件對象的常用方法模式功能描述r只讀模式w寫模式,若存在則覆蓋原有內(nèi)容a追加模式r+讀寫,不創(chuàng)建w+讀寫,若不存在則新建a+追加模式但可讀rt,wt默認為文本方式,相當于r,wrb,wb讀寫二進制文件7.1.2文件讀寫72025/3/6磁盤滿、無法寫入,打開文件要讀取但文件不存在,或者文件路徑錯誤。這些是文件讀寫過程中隨時可能遇到的問題。凡是涉及文件輸入輸出的操作,這類問題在程序設計時是必然要考慮的因素,否則程序的設計并不完整和嚴謹?!纠?-1】向文本文件中寫入并讀取內(nèi)容82025/3/6文件寫入部分s='文本文件的讀取方法\n文本文件的寫入方法\n'f=open('sample.txt','w')print('len(s):',len(s))print('f.writereturn:',f.write(s))f.close()執(zhí)行結果如下,可以看出寫入的長度為20個字符,注意這里單個漢字和英文都是按1個字符來計算,而不是漢字所實際占用的字節(jié)數(shù)。len(s):20f.writereturn:20文件讀取部分f=open('sample.txt','r’)#打開一個剛剛寫入過的,已經(jīng)存在了的文件txt=f.read()print(txt)f.close()【例7-1】向文本文件中寫入并讀取內(nèi)容92025/3/6執(zhí)行結果如下,打印出了原有字符串的內(nèi)容,說明在文件中保存完好。文本文件的讀取方法文本文件的寫入方法由以上例子可以看出,打開一個已經(jīng)存在的文件,讀取正常,當試圖打開一個不存在的文件,系統(tǒng)會給出錯誤信息。>>>f=open('sample1.txt','r') #試圖打開一個不存在的文件FileNotFoundError:[Errno2]Nosuchfileordirectory:'sample1.txt'>>>f.read() #此時讀取會返回空串''7.1.2文件讀寫102025/3/6采用with,open()函數(shù)返回的文件對象只在with代碼塊內(nèi)可用,且只有文件打開成功時才能進入代碼塊,這樣就避免了因文件無法正常打開而造成后續(xù)文件讀取可能存在的問題。具體實現(xiàn)如下。withopen('sample1.txt','r')asf: txt=f.read() print(txt)使用上下文管理關鍵字with可以自動管理資源,無論何種原因跳出with塊,總能保證文件被正確關閉,因此此處無需調(diào)用文件的close()方法?!纠?-2】讀取一段中文詩詞并打印112025/3/6fname=r'C:\Users\Public\shi.txt'withopen(fname,'r',encoding='utf-8')asf:lines=f.readlines()forlineinlines:print(line.rstrip())程序運行結果如下,顯示出了詩的主要內(nèi)容:日照香爐生紫煙遙看瀑布掛前川飛流直下三千尺疑是銀河落九天Windows平臺下open()函數(shù)在打開文件的時候缺省的編碼(encoding)為gbk(cp936),并不是UTF-8,因此在打開文件的時候應指定編碼為UTF-8,否則讀取文件會出現(xiàn)錯誤。7.1.2文件讀寫122025/3/6下面我們嘗試在文件后附加一段文本的同時,還進行文件內(nèi)容的讀取。選取例7-1的寫入部分生成的sample.txt,注意此文件由Python程序生成,因此編碼采用了默認的編碼gbk,因此在打開的時候可以不指定open()方法中的encoding,或者指定為gbk,與不指定默認采用gbk的效果相同。>>>f=open('sample.txt','a+',encoding='gbk')>>>s=f.read(5)>>>print('infile->',s)infile->>>>f.tell()40>>>f.close()此時的運行結果顯示沒有s為空串,而通過tell()方法查看文件指針,可以看出,文件的指針在該文件的末尾?!纠?-3】附加寫入文件的同時進行文件內(nèi)容讀取132025/3/6withopen('sample.txt','a+',encoding='gbk')asf:f.write('\nPythonisaprogramminglanguage.\n')f.flush() #清空緩沖區(qū),確保數(shù)據(jù)保存到文件f.seek(0) #將文件指針轉(zhuǎn)移到文件首部s=f.read(20)while(s!=''): #若讀取到文件尾部,會返回一個空串print('infile->',s)s=f.read(20)程序運行結果如下:infile->文本文件的讀取方法文本文件的寫入方法

infile->Pythonisaprograinfile->mminglanguage.7.2二進制文件142025/3/6二進制文件二進制文件包括圖像文件、可執(zhí)行文件、音視頻文件、字處理文檔等,不能使用記事本或其他文本編輯軟件直接讀寫。二進制文件圖像文件可執(zhí)行文件音視頻文件字處理文檔7.2.1讀寫二進制數(shù)據(jù)152025/3/6海量性二進制數(shù)據(jù)讀寫二進制數(shù)據(jù)需要將內(nèi)存中的數(shù)據(jù)在不影響其含義的情況下轉(zhuǎn)化為二進制形式,這一過程對于對象而言又稱為對象的序列化,而反序列化則是把二進制的數(shù)據(jù)流重新恢復為原有對象的過程。序列化模塊picklestructjsonmarshalshelvepandas7.2.1讀寫二進制數(shù)據(jù)162025/3/6【例7-4】文件復制的程序(mycpy.py),具體使用過程為:pythonmycpysrcfiledstfile程序的代碼如下:importsys

defmain():print(sys.argv) #sys.argv為命令行參數(shù)列表iflen(sys.argv)<3: #len(sys.argv)表示命令行參數(shù)的個數(shù)print('Usage:pythonmycpysrcfiledstfile')withopen(sys.argv[1],'rb')assf:withopen(sys.argv[2],'wb')asdf:forlineinsf.readlines():df.write(line)print('filecopied.')7.2.1讀寫二進制數(shù)據(jù)172025/3/6if__name__=="__main__":main()程序運行時需要在命令行狀態(tài),進入到mycpy.py所在的目錄,并且在該目錄中放置一個二進制文件,如butterfly.jpg,用以作為源文件,目標文件的名字可以任意給定,如bf.jpg,然后執(zhí)行以下命令:pythonmycpy.pybutterfly.jpgbf.jpg程序結果如下,同時可以觀察到已經(jīng)在當前目錄下生成了bf.jpg文件。['mycpy.py','butterfly.jpg','bf.jpg']filecopied.7.2.2對象的序列化182025/3/6Python程序在內(nèi)存中的數(shù)據(jù)一般是放置在列表、元組、字典等各類對象之中。當進行文件保存或網(wǎng)絡處理時,不能直接送入這些對象本身,必須將這些對象進行序列化,以轉(zhuǎn)化為字節(jié)碼才能進行處理。pickle是一個常用且效率較高的二進制文件序列化模塊,屬于python語言的標準組件,不需要單獨安裝。Pickle模塊的序列化操作Pickle模塊的反序列化操作采用dump(obj,file)方法采用load(file)方法將程序中運行的對象信息保存至文件中從文件中創(chuàng)建上一次程序保存的對象【例7-5】一個學生成績存儲和查詢應用192025/3/6成績保存的代碼如下:importpicklestudents=[] #建立一個學生列表students.append({'學號':'01','姓名':'王五','平時':80,'實驗':60,'期末':74})students.append({'學號':'02','姓名':'張三','平時':68,'實驗':83,'期末':79})students.append({'學號':'03','姓名':'李四','平時':73,'實驗':75,'期末':85})students.append({'學號':'04','姓名':'孫六','平時':87,'實驗':69,'期末':63})ratio=[0.3,0.2,0.5] #平時成績占比0.3,實驗占比0.2,期末占比0.5

withopen('student.dat','wb')asf: pickle.dump(students,f) pickle.dump(ratio,f)執(zhí)行以上程序,會在當前目錄下生成一個student.dat的文件?!纠?-5】一個學生成績存儲和查詢應用202025/3/6importpicklewithopen('student.dat','rb')asf:students=pickle.load(f)ratio=pickle.load(f)forsinstudents:s['總評']=s['平時']*ratio[0]+s['實驗']*ratio[1]+s['期末']*ratio[2]print(s)程序計算結果如下:{'學號':'01','姓名':'王五','平時':80,'實驗':60,'期末':74,'總評':73.0}{'學號':'02','姓名':'張三','平時':68,'實驗':83,'期末':79,'總評':76.5}{'學號':'03','姓名':'李四','平時':73,'實驗':75,'期末':85,'總評':79.4}{'學號':'04','姓名':'孫六','平時':87,'實驗':69,'期末':63,'總評':71.4}以下讀取學生成績文件,并計算出總評成績:7.2.3字節(jié)型數(shù)據(jù)的處理212025/3/6struct模塊能對字節(jié)型的數(shù)據(jù)進行有效處理。由于數(shù)據(jù)轉(zhuǎn)換成二進制的字節(jié)碼可能會發(fā)生兩種不同的情況,是高位字節(jié)在前還是低位字節(jié)在前,不同的順序代表了不同的編碼規(guī)范。struct模塊字節(jié)序標識符符號字節(jié)序大小@native需要是4字節(jié)的整數(shù)倍=native按原有字節(jié)數(shù)<

Little-Endian按原有字節(jié)數(shù)Little-Endian就是低位字節(jié)排放在內(nèi)存的低地址端>

Big-Endian按原有字節(jié)數(shù)Big-Endian是高位字節(jié)排放在內(nèi)存的低地址端!network(=Big-Endian)按原有字節(jié)數(shù)7.2.3字節(jié)型數(shù)據(jù)的處理222025/3/6海量性struct模塊支持的格式符號數(shù)據(jù)類型字節(jié)數(shù)說明xnovalue1填充符cstringoflength11字節(jié)binteger1有符號字節(jié)Binteger1無符號字節(jié)?bool1布爾hinteger2短整數(shù)Hinteger2無符號短整數(shù)iinteger4整數(shù)Iinteger4無符號整數(shù)linteger4長整數(shù)Linteger4無符號長整數(shù)qinteger8長整數(shù)Qinteger8無符號長整數(shù)ffloat4浮點數(shù)dfloat8雙精度浮點數(shù)sstring

字符串pstring

字符串Pinteger

字節(jié)串7.2.3字節(jié)型數(shù)據(jù)的處理232025/3/6struct可以嚴格地按照要求的格式將數(shù)據(jù)打包成二進制的字節(jié)流,其主要提供以下三個方法:方法一:pack(fmt,v1,v2,...)按給定的格式fmt把數(shù)據(jù)封裝成字節(jié)流方法二:unpack(fmt,string)

按照給定的格式(fmt)解析字節(jié)流string,返回一個元組

方法三:calcsize(fmt)計算給定的格式(fmt)占用多少字節(jié)的內(nèi)存7.2.3字節(jié)型數(shù)據(jù)的處理242025/3/6打包和解包的過程以下例子展示了利用struct進行打包和解包的過程:>>>importstruct>>>a="好好學習";b=b"Python";c=20;d=42.56 由于struct.pack()方法若輸入?yún)?shù)為字符串,要求轉(zhuǎn)化為'utf-8'編碼,可以采用在一個常規(guī)ASCII字符串前面加b前綴的方式,對于含有中文等特殊字符,則應調(diào)用字符串的encode(encoding='utf-8')編碼方法。>>>a.encode()b'\xe5\xa5\xbd\xe5\xa5\xbd\xe5\xad\xa6\xe4\xb9\xa0'>>>bb'Python'>>>"Python".encode()b'Python’由此可見,這兩種編碼方式的結果相同,都產(chǎn)生了'utf-8'編碼的字節(jié)碼(bytes)。在打包過程中,需要結合數(shù)據(jù)的類型。7.2.3字節(jié)型數(shù)據(jù)的處理252025/3/6根據(jù)struct模塊支持的格式的表中所列出的格式符號進行編碼,同時解碼過程也要事先知道這一格式信息,才能獲得準確的結果。>>>#打包>>>print('calcuatedsize=',struct.calcsize("12s6sif")) #計算轉(zhuǎn)換字節(jié)長度calcuatedsize=28>>>binstr=struct.pack("12s6sif",a.encode(),b,c,d)>>>print('packedsize=',len(binstr))packedsize=28>>>binstr1=struct.pack("i",c)>>>#解包>>>e,f,g,h=struct.unpack("12s6sif",binstr)>>>print(e.decode(),f.decode(),g,h)好好學習Python2042.560001373291016>>>i,=struct.unpack("i",binstr1) #獲取元組中的數(shù)據(jù)>>>print(i)7.2.3字節(jié)型數(shù)據(jù)的處理262025/3/6bmp格式文件在實際應用中,可以根據(jù)需要將編碼的數(shù)據(jù)保存到二進制文件,也可以根據(jù)已知的格式從二進制文件中解碼出原有的數(shù)據(jù)。下面以.bmp的圖像文件為例,說明具體的解碼過程。BMP文件的格式如下所示:1-2共2個字節(jié)字符,'BM'表示W(wǎng)indows位圖,'BA'表示OS/2位圖;3-6共4個字節(jié)整數(shù),表示位圖大小;7-10共4個字節(jié)整數(shù),保留位,始終為0;11-14共4個字節(jié)整數(shù),實際圖像的偏移量;15-18共4個字節(jié)整數(shù),文件頭的字節(jié)數(shù);19-22共4個字節(jié)整數(shù),圖像寬度;23-26共4個字節(jié)整數(shù),圖像高度;27-28共2個字節(jié)整數(shù),值固定為1;29-30共2個字節(jié)整數(shù),顏色數(shù)?!纠?-6】解析一個BMP的文件頭272025/3/6海量性importstructwithopen('file/butterfly.bmp','rb')asf:x=f.read(30)print(x)y=struct.unpack('=ccIIIIIIHH',x)print(y)size=y[2]print('size:',size)w=y[6];h=y[7];bits=y[9]print('w={},h={}'.format(w,h))print('bits:',bits)程序計算結果如下:b'BMV\n\x08\x00\x00\x00\x00\x006\x00\x00\x00(\x00\x00\x00\xed\x01\x00\x00d\x01\x00\x00\x01\x00\x18\x00'(b'B',b'M',526934,0,54,40,493,356,1,24)size:526934w=493,h=356bits:247.3文件系統(tǒng)操作282025/3/6os與os.path模塊shutil模塊7.3.1os與os.path模塊292025/3/6os模塊提供了文件系統(tǒng)和文件級操作的使用方法,如下表所示os模塊的常用文件操作方法方法功能說明access(path,mode)按照mode制定的權限訪問文件open((path,flags,mode=511)按mode指定的權限打開文件,默認權限為可讀、可寫、可執(zhí)行chmod(path,mode,*,dir_fd=None)改變文件的訪問權限r(nóng)emove(path)刪除指定的文件rename(src,dst)重命名文件或目錄7.3.1os與os.path模塊302025/3/6stat(path)返回文件的所有屬性fstat(path)返回打開的文件的所有屬性startfile(filepath[,operation])使用關聯(lián)的應用程序打開指定文件mkdir(path,mode=511)創(chuàng)建目錄makedirs(pathl/path2...,mode=511)創(chuàng)建多級目錄rmdir(path)刪除目錄removedirs(pathl/path2…)刪除多級目錄listdir(path)返回指定目錄下的文件和目錄信息getcwd()返回當前工作目錄get_exec_path()返回可執(zhí)行文件的搜索路徑chdir(path)把path設為當前工作目錄walk(top,topdown=True)遍歷目錄樹,該方法返回一個元組,包括3個元素:所有路徑名、所有目錄列表與文件列表sep當前操作系統(tǒng)所使用的路徑分隔符extsep當前操作系統(tǒng)所使用的文件擴展名分隔符7.3.1os與os.path模塊312025/3/6os.path模塊提供了用于路徑判斷、切分、連接以及文件夾遍歷的方法,如下表所示os.path模塊的常用文件操作方法方法功能說明abspath(path)返回絕對路徑dirname(p)返回目錄的路徑exists(path)判斷文件是否存在getatime(filename)返回文件的最后訪問時間getctime(filename)返回文件的創(chuàng)建時間getmtime(filename)返回文件的最后修改時間getsize(filename)返回文件的大小isabs(path)判斷path是否為絕對路徑isdir(path)判斷path是否為目錄isfile(path)判斷path是否為文件join(path,*paths)連接兩個或多個pathsplit(path)對路徑進行分割,以列表形式返回splitext(path)從路徑中分割文件的擴展名splitdrive(path)從路徑中分割驅(qū)動器的名稱7.3.1os與os.path模塊322025/3/6

下面通過幾個示例來演示如何利用os和os.path模塊訪問C盤Temp目錄下test.txt,test1.txt兩個文件。>>>importos>>>importos.path>>>os.path.exists('C:\\Temp\\test1.txt')True>>>os.chdir("C:\\Temp") #改變當前的工作目錄>>>folder=os.path.dirname(os.path.abspath(__file__))#當前例子的執(zhí)行目錄>>>print(folder) #當前執(zhí)行目錄不隨工作目錄改變E:\python\examples>>>p=os.getcwd() >>>print(p) #當前的工作目錄已經(jīng)改變C:\Temp>>>fp='C:\\Temp\sample\test2.txt'>>>os.path.split(fp)('C:\\Temp','sample\test2.txt')>>>os.path.splitdrive(fp)('C:','\\Temp\\sample\test2.txt')7.3.1os與os.path模塊332025/3/6【例7-7】遍歷目錄中的文件及其子目錄。importosos.chdir("C:\\Temp")forroot,dirs,filesinos.walk(".",topdown=False):print('root:',root)print('dirs:',dirs)print('files:',files)fornameinfiles:print(os.path.join(root,name))fornameindirs:print(os.path.join(root,name))執(zhí)行結果如下:root:.\sampledirs:[]files:['test2.txt'].\sample\test2.txtroot:.dirs:['sample']files:['test.txt','test1.txt'].\test.txt.\test1.txt.\sample7.3.2shutil模塊342025/3/6shutil模塊也屬于Python標準庫,是對os模塊的補充。Shutil模塊可以與os模塊配合使用,基本可以完成一般的文件系統(tǒng)功能。shutilshutil【例7-8】shutil模塊文件和目錄操作352025/3/6如以下例子所示,進行一下常見的文件復制、目錄復制和刪除等操作。其中sample.txt是例7-1生成的文件,由于該文件不在當前目錄下,所以出現(xiàn)了無法找到文件的錯誤。>>>importshutil,os>>>shutil.copy("sample.txt","sample1.txt") FileNotFoundError:[Errno2]Nosuchfileordirectory:'sample.txt'此時可以通過查找工作目錄并轉(zhuǎn)換目錄的方式,進入sample.txt所在的目錄。>>>os.getcwd()'C:\\Python36'>>>os.chdir("E:\\python\\examples.") #進入文件所在目錄>>>importshutil,os >>>shutil.copy("sample.txt","sample1.txt") #成功復制【例7-8】shutil模塊文件和目錄操作362025/3/6'sample1.txt'#注意刪除文件的方法在os模塊中,成功調(diào)用后返回空行,在資源管理器中可觀察到文件已被刪除>>>os.remove('sample1.txt') #將C:\Temp目錄整個復制到當前路徑下的Temp目錄中,在資源管理器中可觀察到目錄已成功復制>>>shutil.copytree(r'C:\\Temp','Temp')'Temp'#將當前目錄下的Temp目錄壓縮,壓縮后的文件名為'TempArch.zip’>>>shutil.make_archive('TempArch','zip','Temp') 'E:\\python\\samples\\'TempArch.zip'#刪除工作目錄下的Temp子目錄,成功調(diào)用后返回空行,在資源管理器中可觀察到子目錄已被刪除>>>shutil.rmtree('Temp')#解壓縮TempArch.zip并將輸出文件放置入Temp,成功調(diào)用后返回空行,在資源管理器中可觀察到當前目錄下已經(jīng)重新生成了子目錄Temp>>>shutil.unpack_archive('TempArch.zip','Temp')7.4讀寫常見文件格式372025/3/6CSV文件Excel文件Word文件JSON文件7.4.1CSV文件382025/3/6CSV格式屬于電子表格文件,其中數(shù)據(jù)存儲在單元格內(nèi)。每個單元格按照行和列結構進行組織。 CSV中的每一行代表一個觀察,通常稱為一條記錄。每個記錄可以包含一個或多個由逗號分隔的字段。如果文件中不使用逗號分隔,而是使用制表符進行分隔,這樣的文件格式稱為TSV(制表符分隔值)文件格式。CSV文件電子表格文件列行(記錄)【例7-9】利用CSV文件寫入和讀取人員數(shù)據(jù)392025/3/6將數(shù)據(jù)寫入CSV文件。importcsvdefcsv_write(path,data):withopen(path,'w',encoding='utf-8',newline='')asf:writer=csv.writer(f,dialect='excel')forrowindata:writer.writerow(row)returnTruedata=[['姓名','年齡','身高(cm)','體重(kg)'],['張三',38,'176cm','75'],['李四',25,'160cm','46'],['王五',28,'170cm','62']]csv_write('persons.csv',data)7.4.2Excel文件402025/3/6Excel是常見的電子表格文件,常用xlwt模塊將數(shù)據(jù)寫入Excel表格,用xlrd模塊讀取數(shù)據(jù)。這兩個模塊屬于外部模塊,可以利用Python自帶的pip軟件包管理工具進行安裝。執(zhí)行pip命令時要確保Python的執(zhí)行路徑已經(jīng)設置在系統(tǒng)的Path環(huán)境變量之中,正確設置的情況下可以在任何路徑下執(zhí)行以下命令:pip install 模塊名1 模塊名2 …對于xlwt和xlrd兩個模塊,具體命令如下

:pip install xlwt xlrd利用pip工具安裝xlwt和xlrd兩個模塊7.4.2Excel文件412025/3/6在pip的使用過程中,有時會遇到Python強制要求更新pip工具的情況,提示如下:此時只要按照提示要求,在命令行下執(zhí)行以下命令即可實現(xiàn)pip工具的升級:在進行Excel文件讀寫時,應首先進行工作簿('workbook')的獲取,然后從工作簿中處理表單('sheet')。進入表單處理環(huán)節(jié)以后,即可按行或者列進行數(shù)據(jù)的讀寫,或者是按單元格的方式處理數(shù)據(jù)。具體過程參加例7-10。Youshouldconsiderupgradingviathe'python-mpipinstall--upgradepip'command.python-mpipinstall--upgradepip【例7-10】讀寫Excel文件中的汽車數(shù)據(jù)422025/3/6將數(shù)據(jù)寫入Excel文件。importxlwt defstyle(name,height,bold=False):style=xlwt.XFStyle() #初始化樣式font=xlwt.Font() #為樣式創(chuàng)建字體=namefont.bold=boldfont.color_index=4font.height=heightstyle.font=fontreturnstyledefwrite_excel():workbook=xlwt.Workbook(encoding='utf-8')sheet=workbook.add_sheet('car')rows=[]rows.append([u'車型','顏色',u'價格(萬)','行駛里程'])rows.append([u'奧迪','紅',15,30000])rows.append(['寶馬','黑',25,35000])#按行列寫入數(shù)據(jù)foriinrange(len(rows)):forjinrange(len(rows[0])):sheet.write(i,j,rows[i][j],style('TimesNewRoman',220,True))workbook.save('cars.xls')if__name__=='__main__':write_excel()print(u'創(chuàng)建cars.xlsx文件成功')【例7-10】讀寫Excel文件中的汽車數(shù)據(jù)432025/3/6利用Excel打開文件,以下從Excel文件讀取數(shù)據(jù)。importxlrdworkbook=xlrd.open_workbook('cars.xls')print('表單名稱:',workbook.sheet_names())#根據(jù)sheet索引或者名稱獲取sheet內(nèi)容sheet=workbook.sheets()[0]#或者sheet=workbook.sheet_by_index(0),sheet=workbook.sheet_by_name('car')print('表單{},

行數(shù)={},

列數(shù)={}'.format(,sheet.nrows,sheet.ncols))print('='*30)#按行獲取數(shù)據(jù)foriinrange(sheet.nrows):row=sheet.row_values(i)print(row)print('='*30)#按列獲取數(shù)據(jù)forjinrange(sheet.ncols):col=sheet.col_values(j)print(col)print('='*30)#按單元格獲取數(shù)據(jù)foriinrange(sheet.nrows):forjinrange(sheet.ncols):print(sheet.cell(i,j).value,end='')print()【例7-10】讀寫Excel文件中的汽車數(shù)據(jù)442025/3/6讀取Excel文件的執(zhí)行結果如下:表單名稱:['car']表單car,

行數(shù)=3,

列數(shù)=4==============================['車型','顏色','價格(萬)','行駛里程']['奧迪','紅',15.0,30000.0]['寶馬','黑',25.0,35000.0]==============================['車型','奧迪','寶馬']['顏色','紅','黑']['價格(萬)',15.0,25.0]['行駛里程',30000.0,35000.0]==============================車型

顏色

價格(萬)

行駛里程

奧迪

紅15.030000.0寶馬

黑25.035000.0文件cars.xls的內(nèi)容7.4.3Word文件452025/3/6Word文件Word文件是最常見的文檔編寫文件,很多應用會采用Word作為文檔輸出格式。對于Word文件的讀寫需要安裝python-docx模塊,安裝命令為:pipinstallpython-docx【例7-11】讀寫Word文件中的段落和表格數(shù)據(jù)462025/3/6將數(shù)據(jù)寫入Word文件。fromdocximportDocumentfromdocx.sharedimportInchesdocument=Document()document.add_heading('Python學習材料',0)p=document.add_paragraph('文件是保存在存儲設備上的一段數(shù)據(jù)流。')p.add_run('二進制文件').bold=Truep.add_run('是指圖像、音視頻、字處理文檔等含有特殊格式的文件。計算機的存儲是')p.add_run('二進制的').italic=Truep.add_run('。')document.add_heading('文件讀寫知識學習',level=1)document.add_paragraph('文本文件',style='ListBullet')document.add_paragraph('二進制文件',style='ListBullet')document.add_paragraph('打開文件',style='ListNumber')document.add_paragraph('處理數(shù)據(jù)',style='ListNumber')document.add_paragraph('關閉文件',style='ListNumber')【例7-11】讀寫Word文件中的段落和表格數(shù)據(jù)472025/3/6document.add_picture('butterfly.jpg',width=Inches(2.25))table=document.add_table(rows=1,cols=3)table.style='LightShading'hdr_cells=table.rows[0].cells #創(chuàng)建表頭hdr_cells[0].text='姓名'hdr_cells[1].text='學號'hdr_cells[2].text='成績'students=[('張三','1000012',68),('李四','1000013',75),('王五','1000014',81)]foriinrange(len(students)): #建立表體row_cells=table.add_row().cellsforjinrange(len(students[i])):row_cells[j].text=str(students[i][j])document.add_page_break()document.save('demo.docx')【例7-11】讀寫Word文件中的段落和表格數(shù)據(jù)482025/3/6運行結果如下圖所示:【例7-11】讀寫Word文件中的段落和表格數(shù)據(jù)492025/3/6利用Word軟件打開文件demo.docx,其具體內(nèi)容如圖7-2所示。以下從Word文件讀取數(shù)據(jù)。fromdocximportDocumentdoc=Document('demo.docx’)#讀取標題importreforpindoc.paragraphs:ifre.match("^Heading\d+$",):print(p.text)print("#"*50)forpindoc.paragraphs: #讀取內(nèi)容if=='Normal':print(p.text)print("#"*50)tables=doc.tables #讀取表格fortableintables:forrowintable.rows:forcellinrow.cells:print(cell.text)print('行數(shù)={},列數(shù)={}'.format(len(tables[0].rows),len(tables[0].columns)))【例7-11】讀寫Word文件中的段落和表格數(shù)據(jù)502025/3/6讀取Word文件的執(zhí)行結果如下:文件讀寫知識學習#######################################################################################文件是保存在存儲設備上的一段數(shù)據(jù)流。二進制文件是指圖像、音視頻、字處理文檔等含有特殊格式的文件。計算機的存儲是二進制的。#######################################################################################行數(shù)=4,列數(shù)=3姓名

學號

成績

張三100001268李四100001375王五1000014817.4.4JSON文件512025/3/6JSON文件JSON是一種使用廣泛的輕量數(shù)據(jù)格式,它可以將JavaScript對象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,常用于數(shù)據(jù)的存儲和交換。從數(shù)據(jù)格式來看,Python中的字典類型與JSON數(shù)據(jù)格式很接近。以下左側為字典數(shù)據(jù),右側為JSON數(shù)據(jù):d={ 'a':123, 'b’:{ 'x':['A','B','C'] }, 'c':True, 'd':None}d={ "a":123, "b":{ "x":["A","B","C"] }, "c":true, "d":null}7.4.4JSON文件522025/3/6

由此可見,Python字典類型與JSON類型的數(shù)據(jù)在形式上相近,但也有一些區(qū)別,如Python中的字符串允

溫馨提示

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

評論

0/150

提交評論