版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
學(xué)院系部名稱主講:授課教師姓名Python基礎(chǔ)教程第8章文件處理
使用文件的目的就是把一些文件存放起來,可以讓程序下一次執(zhí)行時(shí)直接使用,而不必重新制作一份。文件的操作包括創(chuàng)建、打開、讀寫、命名、備份、刪除等。本章主要介紹文本文件和csv文件的操作。第8章文件處理【教學(xué)導(dǎo)航】學(xué)習(xí)目標(biāo)1.了解并掌握文件的打開和關(guān)閉方法2.了解并掌握文件的讀寫方法3.了解os模塊4.了解并掌握重命名和刪除文件5.了解并掌握文件夾的操作6.了解并掌握csv文件操作教學(xué)重點(diǎn)文件的打開和關(guān)閉,文件讀寫,重命名和刪除文件,csv文件操作教學(xué)方式案例教學(xué)法、分組討論法、自主學(xué)習(xí)法、探究式訓(xùn)練法課時(shí)建議6課時(shí)本章主要內(nèi)容重命名和刪除文件打開和關(guān)閉文件文件讀寫123Python文件夾操作4csv文件操作56實(shí)訓(xùn)88.1打開和關(guān)閉文件
用Word軟件編寫一份文件,操作流程如下:打開Word軟件,新建一個(gè)Word文件,寫入個(gè)人簡歷信息,保存文件,關(guān)閉Word軟件。同樣,操作文件的整體過程與使用Word軟件編寫一份文件的過程相同:打開文件,或者新建立一個(gè)文件,讀/寫數(shù)據(jù),關(guān)閉文件。本節(jié)主要介紹Windows文件打開和關(guān)閉的方法。[學(xué)習(xí)目標(biāo)]1.掌握open函數(shù)的使用2.了解file對(duì)象的屬性3.掌握close()函數(shù)方法4.了解并掌握使用with語句打開文件的方法8.1打開和關(guān)閉文件
如果要讀寫一個(gè)文件,首先要建立一個(gè)文件對(duì)象,再利用文件對(duì)象提供的方法對(duì)文件的數(shù)據(jù)進(jìn)行讀寫操作。Python提供了必要的函數(shù)和方法進(jìn)行默認(rèn)情況下的文件基本操作。用file對(duì)象做大部分的文件操作。1.open函數(shù)
必須先用Python內(nèi)置的open()函數(shù)打開一個(gè)文件,創(chuàng)建一個(gè)file對(duì)象,相關(guān)的輔助方法才可以調(diào)用它進(jìn)行讀寫,其語法為:open(文件名,訪問模式)代碼完整格式如下:fileobject=open(file_name[,access_mode][,buffering])8.1打開和關(guān)閉文件各個(gè)參數(shù)說明如下。
●file_name:file_name變量是一個(gè)包含了要訪問的文件名稱的字符串值。
●access_mode:access_mode用于決定打開文件的模式,即只讀、寫入、追加等,所有可取值如表8-1-1所列。這個(gè)參數(shù)是非強(qiáng)制的,默認(rèn)文件訪問模式為只讀(r)。
●buffering:如果buffering的值被設(shè)為0,就不會(huì)有寄存操作。如果buffering的值取1,訪問文件時(shí)會(huì)寄存行;如果將buffering的值設(shè)為大于1的整數(shù),表明了寄存區(qū)的緩沖大?。蝗绻鸼uffering的值取負(fù)值,寄存區(qū)的緩沖大小則為系統(tǒng)默認(rèn)。8.1打開和關(guān)閉文件
表8-1-1不同模式打開文件的完全列表模式描述r以只讀方式打開文件。文件的指針將會(huì)放在文件的開頭。這是默認(rèn)模式rb以二進(jìn)制格式打開一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開頭。這是默認(rèn)模式r+打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭rb+以二進(jìn)制格式打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭w打開一個(gè)文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,則創(chuàng)建新文件wb以二進(jìn)制格式打開一個(gè)文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,則創(chuàng)建新文件w+打開一個(gè)文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,則創(chuàng)建新文件8.1打開和關(guān)閉文件
表8-1-1不同模式打開文件的完全列表模式描述wb+以二進(jìn)制格式打開一個(gè)文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,則創(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í)采用的是追加模式。如果該文件不存在,則創(chuàng)建新文件用于讀寫ab+以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,則創(chuàng)建新文件用于讀寫8.1打開和關(guān)閉文件對(duì)文件的讀寫,顯然有一個(gè)從什么位置讀、寫到什么位置的問題。其實(shí),文件對(duì)象隱含著一個(gè)指示文件內(nèi)數(shù)據(jù)位置的指針。當(dāng)一個(gè)文件被打開,多數(shù)的打開方式將這個(gè)指針定位在文件的開始(即指向第0個(gè)位置),但對(duì)于設(shè)置了“a”的打開方式,則指針定位在文件的尾部(最后一個(gè)字節(jié)的下一個(gè)字節(jié))。文件對(duì)象反映的結(jié)果查看如例8-1-1所示。#在同一目錄下新建文本文件test.txt2.file對(duì)象的屬性一個(gè)文件被打開后,有一個(gè)file對(duì)象,可以得到有關(guān)該文件的各種信息。以下是與file對(duì)象相關(guān)的所有屬性的列表,如表8-1-2所示。f=open("test.txt","r")print(type(f))g=open("test.txt","rb")print(type(g))8.1打開和關(guān)閉文件#coding=utf-8#打開一個(gè)文件f=open("f.txt","wb")print("Nameofthefile:",)print("Closedornot:",f.closed)print("Openingmode:",f.mode)屬性描述file.closed如果文件已被關(guān)閉返回True,否則返回Falsefile.mode返回被打開文件的訪問模式
返回文件的名稱file.softspace如果用print輸出后,必須跟一個(gè)空格符,返回False,否則返回True8.1打開和關(guān)閉文件3.close()方法 file對(duì)象的close()方法用于刷新緩沖區(qū)中任何還沒寫入的信息,并關(guān)閉該文件,這之后便不能再進(jìn)行寫入操作。當(dāng)一個(gè)文件對(duì)象的引用被重新指定給另一個(gè)文件時(shí),Python會(huì)關(guān)閉之前的文件。用close()方法關(guān)閉文件是一個(gè)很好的習(xí)慣。其語法為: fileObject.close();例8-1-3打開與關(guān)閉文件。 Python處理文件中的數(shù)據(jù),可以使用while語句來循環(huán)讀取文件中的行。例如:#coding=utf-8#打開一個(gè)文件f=open("f.txt","wb")print("Nameofthefile:",)print("Closedornot:",f.closed)print("Openingmode:",f.mode)8.1打開和關(guān)閉文件
也可以用for語句來迭代文件中所有的行: forlineinf: pass4.使用with語句打開文件
使用with語句,執(zhí)行文件打開操作,實(shí)現(xiàn)預(yù)定義清理操作,文件在使用后將自動(dòng)關(guān)閉,不再需要書寫關(guān)閉文件代碼。 with語句的基本格式如下: with表達(dá)式[as對(duì)象]:
對(duì)象操作語句新建一文本文件Test.txt,在文件中輸入一行字符串“異常處理測(cè)試!”,在同一目錄下,新建py文件,使用with語句讀取Test.txt進(jìn)行輸出。操作如例8-1-4所示。8.1打開和關(guān)閉文件
在例8-1-4中,首先打開當(dāng)前工作目錄中的文件Test.txt,再將文件對(duì)象賦給變量f,最后執(zhí)行with語句下面的<語句塊>,輸出一行字符串。
使用with語句打開文件,如果文件正常,打開文件后,將文件對(duì)象賦值給f,然后用for循環(huán)語句循環(huán)輸出。當(dāng)對(duì)文件的操作結(jié)束后,with語句會(huì)關(guān)閉文件。 with語句適用于對(duì)資源進(jìn)行訪問的場(chǎng)合,確保不管使用過程中是否發(fā)生異常都會(huì)執(zhí)行必要的清理操作,釋放資源。with語句后的表達(dá)式,是上下文管理器。上下文管理器是Python2.5以后版本均支持的語法,用于規(guī)定某個(gè)對(duì)象的使用范圍,一旦進(jìn)入或離開使用范圍,就有特殊的操作被調(diào)用。 with語句是Python異常處理機(jī)制的一個(gè)部分。8.2文件讀寫使用文件,主要是為了文件處理實(shí)現(xiàn)文件的讀寫等操作。本節(jié)主要介紹Python中讀寫文件和處理文件的方法。[學(xué)習(xí)目標(biāo)]1.了解并掌握文件write()方法2.了解并掌握文件read()方法3.了解并掌握獲取文件讀寫位置的方法。4.了解并掌握文件內(nèi)容處理的方法5.了解并掌握文件備份的方法8.2文件讀寫 file對(duì)象提供了一系列方法,能讓我們的文件訪問更輕松。下面來看看如何使用read()和write()方法來讀取和寫入文件。1.write()方法write()方法可將任何字符串寫入一個(gè)打開的文件中。需要重點(diǎn)注意的是,Python字符串可以是二進(jìn)制數(shù)據(jù),而不僅僅是文字。write()方法不在字符串的結(jié)尾添加換行符('\n'),其語法為: fileObject.write(string);
在這里,被傳遞的參數(shù)是要寫入到已打開文件中的內(nèi)容。
8.2文件讀寫2.read()方法 read()方法從一個(gè)打開的文件中讀取一個(gè)字符串。其語法為:fileObject.read([count]);
在這里,被傳遞的參數(shù)是要從已打開文件中讀取的字節(jié)計(jì)數(shù)。該方法從文件的開頭開始讀入,如果沒有傳入count,它會(huì)嘗試讀取盡可能多的內(nèi)容,很可能是直到文件的末尾,如例8-2-2所示。3.文件位置 tell()方法用于告訴文件內(nèi)的當(dāng)前位置;換句話說,下一次的讀寫會(huì)發(fā)生在文件開頭多字節(jié)之后8.2文件讀寫 seek(offset[,from])方法用于改變當(dāng)前文件的位置,其中,offset變量表示要移動(dòng)的字節(jié)數(shù),from變量指定開始移動(dòng)字節(jié)的參考位置。
如果from設(shè)為0,這意味著將文件的開頭作為移動(dòng)字節(jié)的參考位置。如果設(shè)為1,則使用當(dāng)前的位置作為參考位置。如果它被設(shè)為2,那么該文件的末尾將作為參考位置,如例8-2-3所示。
#coding=utf-8#打開一個(gè)文件f=open("f.txt","r+")str=f.read(10);print("ReadStringis:",str)#查找當(dāng)前位置position=f.tell();print("Currentfileposition:",position)#把指針重新定位到文件開頭position=f.seek(0,0);str=f.read(10);print("AgainreadStringis:",str)#關(guān)閉打開的文件f.close()
8.2文件讀寫4.文件內(nèi)容處理
在前面的實(shí)例中,介紹了文件的讀寫操作。事實(shí)上,文件內(nèi)容數(shù)據(jù)處理,是文件操作的重要部分。以例8-2-4為例,打開文件后,迭代處理每一行數(shù)據(jù),并把每一行數(shù)據(jù)轉(zhuǎn)換為一個(gè)整數(shù),累加后進(jìn)行輸出。
使用open函數(shù),在文件處理前需要打開文件,處理結(jié)束后需要關(guān)閉文件。在Python中,可以使用with語句來管理文件的打開和關(guān)閉。例8-2-4代碼可以改寫為例8-2-5所示代碼。8.2文件讀寫
例8-2-5使用withopen操作文件進(jìn)行文件數(shù)據(jù)處理實(shí)例。5.文件備份
輸入需要備份的文件的名字,再利用程序?qū)ξ募M(jìn)行備份。操作如例8-2-6所示。#輸入文件oldFileName=input("請(qǐng)輸入要備份的文件名字:")#打開文件oldFile=open(oldFileName,'rb')#提取文件后綴fileFlagNum=oldFileName.rfind('.')iffileFlagNum>0:fileFlag=oldFileName[fileFlagNum:]#新的文件命名方式newFileName=oldFileName[:fileFlagNum]+'[復(fù)件]'+fileFlag#創(chuàng)建新文件newFile=open(newFileName,'wb')#把舊文件中的數(shù)據(jù)一行一行復(fù)制到新文件中forlineinoldFile.readlines():newFile.write(line)#關(guān)閉文件oldFile.close()newFile.close()
8.3重命名和刪除文件有些時(shí)候,需要對(duì)文件進(jìn)行重命名、刪除等操作,Python的os模塊是Python內(nèi)置的一個(gè)模塊,用來處理文件及目錄。os模塊功能強(qiáng)大,涵蓋了文件系統(tǒng)所有的處理方法。[學(xué)習(xí)目標(biāo)]1.了解并熟悉os模塊操作函數(shù)2.了解并掌握文件的絕對(duì)路徑和拼接路徑3.了解并掌握文件獲得程序所在的實(shí)際目錄的方法4.了解并掌握文件重命名的方法5.了解并掌握批量文件重命名的方法6.了解并掌握刪除文件的方法8.3.1os模塊os模塊在使用之前需要導(dǎo)入,導(dǎo)入后建議使用dir命令查看os里面的子模塊和方法,如圖8-3-1所示os模塊的方法區(qū)分文件系統(tǒng),在Windows和Linux下方法功能相同,都用于提供系統(tǒng)級(jí)別的操作。os模塊操作函數(shù)如表8-3-1所示。
圖8-3-1os模塊方法和子模塊
8.3.1os模塊
表8-3-1os模塊操作函數(shù)一覽表函數(shù)說明os.getcwd()獲取當(dāng)前工作目錄,即當(dāng)前Python腳本工作的目錄路徑os.chdir("dirname")改變當(dāng)前腳本工作目錄,相當(dāng)于shell下的cd命令os.curdir返回當(dāng)前目錄('.')os.pardir獲取當(dāng)前目錄的父目錄字符串名('..')os.makedirs('dir1/dir2')可生成多層遞歸目錄os.removedirs('dirname1')若目錄為空,則刪除,并遞歸到上一級(jí)目錄,如若上一級(jí)目錄也為空,則刪除,依此類推os.mkdir('dirname')生成單級(jí)目錄,相當(dāng)于shell中的mkdirdirname命令8.3.1os模塊
續(xù)表8-3-1os模塊操作函數(shù)一覽表函數(shù)說明os.rmdir('dirname')刪除單級(jí)空目錄,若目錄不為空則無法刪除,報(bào)錯(cuò),相當(dāng)于shell中的rmdirdirname命令os.listdir('dirname')列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印os.remove()刪除一個(gè)文件os.rename("oldname","new")重命名文件/目錄os.stat('path/filename')獲取文件/目錄信息os.sep操作系統(tǒng)特定的路徑分隔符,Windows下為“\\”,Linux下為“/”os.linesep當(dāng)前平臺(tái)使用的行終止符,Windows下為“\t\n”,Linux下為“\n”8.3.1os模塊
續(xù)表8-3-1os模塊操作函數(shù)一覽表函數(shù)說明os.pathsep用于分割文件路徑的字符串字符串指示當(dāng)前使用平臺(tái),Windows->'nt,Linux->'posix'os.system("bashcommand")運(yùn)行shell命令,直接顯示os.environ獲取系統(tǒng)環(huán)境變量os.path.abspath(path)返回path規(guī)范化的絕對(duì)路徑os.path.split(path)將path分割成目錄和文件名二元組返回os.path.dirname(path)返回path的目錄。其實(shí)就是os.path.split(path)的第一個(gè)元素8.3.1os模塊
續(xù)表8-3-1os模塊操作函數(shù)一覽表函數(shù)說明os.path.basename(path)返回path最后的文件名。如果path以/或\結(jié)尾,那么就返回空值,即os.path.split(path)的第二個(gè)元素os.path.exists(path)如果path存在,返回True;如果path不存在,返回Falseos.path.isabs(path)如果path是絕對(duì)路徑,返回Trueos.path.isfile(path)如果path是一個(gè)存在的文件,返回True,否則返回Falseos.path.isdir(path)如果path是一個(gè)存在的目錄,返回True,否則返回Falseos.path.join(path1[,path2[,...]])將多個(gè)路徑組合后返回,第一個(gè)絕對(duì)路徑之前的參數(shù)將被忽略8.3.1os模塊
續(xù)表8-3-1os模塊操作函數(shù)一覽表2.模塊常用方法
在讀寫文件時(shí),經(jīng)常需要用到文件的絕對(duì)路徑和相對(duì)路徑。絕對(duì)路徑是指從盤符開始的路徑,如“D:\python\例題”;相對(duì)路徑是指以當(dāng)前目錄為參考的路徑,如“\例題”。使用os模塊可以獲取到當(dāng)前文件的絕對(duì)路徑和拼接路徑,如例8-3-1和例8-3-2所示。
函數(shù)說明os.path.getatime(path)返回path所指向的文件或者目錄的最后存取時(shí)間os.path.getmtime(path)返回path所指向的文件或者目錄的最后修改時(shí)間8.3.1os模塊例8-3-1使用os模塊來獲取當(dāng)前文件的絕對(duì)路徑并輸出文件內(nèi)容實(shí)例。上例中使用了os模塊的os.path.dirname(path)方法,獲取到當(dāng)前目錄的絕對(duì)路徑,然后再獲取文件并按行進(jìn)行輸出。例8-3-2使用os模塊來獲取當(dāng)前文件的拼接路徑并輸出文件內(nèi)容實(shí)例。8.3.1os模塊上例中連續(xù)使用了os模塊的os.path.dirname(path)方法、os.path.dirname(os.path.dirname(__file__)),獲取到當(dāng)前目錄的父目錄絕對(duì)路徑,然后再獲取文件并按行進(jìn)行輸出。使用os模塊可以獲得程序所在的實(shí)際目錄,如例8-3-3所示。例8-3-3使用os模塊來獲取文件的實(shí)際目錄并輸出文件內(nèi)容實(shí)例。
8.3.2重命名和刪除文件操作Python的os模塊提供了執(zhí)行文件處理操作的方法,比如重命名和刪除文件。要使用這個(gè)模塊,必須先導(dǎo)入它(importos),然后再調(diào)用相關(guān)的各種功能。1.rename()方法
rename()方法需要兩個(gè)參數(shù),即當(dāng)前的文件名和新文件名,其語法為: os.rename(current_file_name,new_file_name)將新建的一文本文件test1.txt,重命名為test2.txt,操作如例8-3-4所示。例8-3-4文件的重命名實(shí)例。2.remove()方法用remove()方法刪除文件,需要提供要?jiǎng)h除的文件名作為參數(shù),其語法為: os.remove(file_name)8.3.2重命名和刪除文件操作刪除一個(gè)已經(jīng)存在的文件test2.txt,操作如例8-3-5所示。
例8-3-5刪除文件實(shí)例。3.批量文件重命名
在很多時(shí)候,需要將某個(gè)文件夾下的文件按一定的規(guī)則重新命名。Python可能用這個(gè)簡單的程序,實(shí)現(xiàn)文件的批量命名操作。使用os模塊可以輕松批量為文件名添加前綴,操作如例8-3-6所示。
例8-3-6批量添加前綴實(shí)例。8.4Python文件夾操作有些時(shí)候,需要對(duì)文件進(jìn)行重命名、刪除等操作,Python的os模塊是Python內(nèi)置的一個(gè)模塊,用來處理文件及目錄。os模塊功能強(qiáng)大,涵蓋了文件系統(tǒng)所有的處理方法。[學(xué)習(xí)目標(biāo)]1.了解文件夾的基本操作2.了解并掌握os模塊目錄操作方法8.4Python文件夾操作
文件都包含在各個(gè)不同的目錄下,Python通過導(dǎo)入os模塊對(duì)文件和目錄進(jìn)行操作。os模塊有許多方法能創(chuàng)建、刪除和更改目錄。1.mkdir()方法
可以使用os模塊的mkdir()方法在當(dāng)前目錄下創(chuàng)建新的目錄,需要提供一個(gè)包含了要?jiǎng)?chuàng)建的目錄名稱的參數(shù),其語法為: os.mkdir("newdir")例8-4-1在當(dāng)前目錄下創(chuàng)建一個(gè)新目錄(test)。8.4Python文件夾操作
2.chdir()方法
可以用chdir()方法來改變當(dāng)前的目錄。chdir()方法需要的一個(gè)參數(shù)是想設(shè)成當(dāng)前目錄的目錄名稱,其語法為:os.chdir("newdir")例8-4-2改變操作目錄(進(jìn)入之前創(chuàng)建的"test"目錄)。3.getcwd()方法 getcwd()方法用于顯示當(dāng)前的工作目錄,其語法為: os.getcwd()8.4Python文件夾操作例8-4-3給出當(dāng)前目錄程序?qū)嵗?.rmdir()方法rmdir()方法用于刪除目錄,目錄名稱以參數(shù)傳遞。需要注意的是,在刪除這個(gè)目錄之前,它的所有內(nèi)容應(yīng)該先被清除。其語法為: os.rmdir('dirname’)例8-4-4刪除當(dāng)前目錄程序?qū)嵗夸洷仨毥o出完整名稱,否則會(huì)在當(dāng)前目錄下搜索該目錄。8.4Python文件夾操作使用os.rmdir刪除的目錄必須為空目錄,否則函數(shù)會(huì)報(bào)錯(cuò)。如果刪除的目錄也不存在,也會(huì)報(bào)錯(cuò)。5.listdir()方法listdir()方法用于返回當(dāng)前目錄下的文件與子目錄名。例8-4-5返回當(dāng)前目錄下的文件與子目錄名。6.文件、目錄相關(guān)的方法 os對(duì)象方法對(duì)Windows和UNIX操作系統(tǒng)上的文件及目錄進(jìn)行一個(gè)廣泛且實(shí)用的處理及操控,和file對(duì)象方法有一定差別,兩者的比較如下所述。8.4Python文件夾操作 file對(duì)象方法:file對(duì)象提供了操作文件的一系列方法。 os對(duì)象方法:提供了處理文件及目錄的一系列方法。8.5csv文件操作csv文件由任意數(shù)目的記錄組成,記錄間以某種換行符分隔,每條記錄由字段組成。本節(jié)介紹csv文件的基礎(chǔ)操作。[學(xué)習(xí)目標(biāo)]1.了解讀取csv數(shù)據(jù)2.了解并掌握csv.reader函數(shù)的用法3.了解并掌握csv.DictReader函數(shù)的用法4.了解并掌握csv.writer函數(shù)的用法5.了解并掌握csv.DictWriter函數(shù)的用法8.5.1csv數(shù)據(jù)
csv(Comma-SeparatedValues,逗號(hào)分隔值,有時(shí)也稱為字符分隔值,因?yàn)榉指糇址部梢圆皇嵌禾?hào)),其文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本)。純文本意味著該文件是一個(gè)字符序列。csv文件由任意數(shù)目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其他字符或字符串,最常見的是逗號(hào)或制表符。通常,所有記錄都有完全相同的字段序列,通常都是純文本文件。建議使用Word或記事本來開啟,在另存為新文檔后用Excel開啟也是方法之一。 csv是一種通用的、相對(duì)簡單的文件格式,被用戶、商業(yè)和科學(xué)廣泛應(yīng)用。最廣泛的應(yīng)用是在程序之間轉(zhuǎn)移表格數(shù)據(jù),而這些程序本身是在不兼容的格式上進(jìn)行操作的(往往是私有的和/或無規(guī)范的格式)。因?yàn)榇罅砍绦蚨贾С帜撤Ncsv變體,至少是作為一種可選擇的輸入/輸出格式。8.5.1csv數(shù)據(jù)
例如,一個(gè)用戶可能需要交換信息,從一個(gè)以私有格式存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫程序,到一個(gè)數(shù)據(jù)格式完全不同的電子表格。最可能的情況是,該數(shù)據(jù)庫程序可以導(dǎo)出數(shù)據(jù)為csv文件,然后被導(dǎo)出的csv文件可以以電子表格程序?qū)搿sv并不是一種單一的、定義明確的格式(RFC4180中有一個(gè)被通常使用的定義)。在實(shí)踐中,csv泛指具有以下特征的任何文件:
●純文本,使用某個(gè)字符集,比如ASCII、Unicode、EBCDIC或GB2312。
●由記錄組成(典型的是每行一條記錄)。
●每條記錄被分隔符分隔為字段(典型分隔符有逗號(hào)、分號(hào)或制表符;有時(shí)分隔符可以包括空格)。
●每條記錄都有同樣的字段序列。在編寫程序時(shí),可能需要將數(shù)據(jù)轉(zhuǎn)移到文件里面,此時(shí)可以考慮使用內(nèi)置模塊—csv模塊。在程序中,用命令importcsv可直接調(diào)用csv模塊進(jìn)行csv文件的讀寫。8.5.2讀取csv數(shù)據(jù)在讀取csv數(shù)據(jù)之前,先選擇一個(gè)用csv文件格式儲(chǔ)存的數(shù)據(jù)作為演示的例子,這里選擇數(shù)據(jù)集文件。數(shù)據(jù)集是常用的分類實(shí)驗(yàn)數(shù)據(jù)集,分為3類(Setosa、Versicolour、Virginica),每個(gè)數(shù)據(jù)包含4個(gè)屬性:外長、外寬、內(nèi)長、內(nèi)寬?,F(xiàn)取部分?jǐn)?shù)據(jù),以方便解釋說明。具體數(shù)據(jù)如表8-5-1所示。
表8-5-1文件數(shù)據(jù)外長外寬內(nèi)長內(nèi)寬名稱5.13.51.40.2setosa4.931.40.2setosa4.73.21.30.2setosa4.63.11.50.2setosa53.61.40.2setosa5.22.73.91.4versicolor523.51versicolor8.5.2讀取csv數(shù)據(jù)
續(xù)表8-5-1文件數(shù)據(jù)外長外寬內(nèi)長內(nèi)寬名稱5.934.21.5versicolor62.241versicolor6.12.64.71.4versicolor7.135.92.1virginica6.32.95.61.8virginica6.535.82.2virginica7.636.62.1virginica4.92.54.51.7virginica8.5.2讀取csv數(shù)據(jù)
讀取csv文件之前需要用open函數(shù)打開文件路徑。
讀取csv文件的方法有兩種。
第一種方法是使用csv.reader函數(shù),接收一個(gè)可迭代的對(duì)象(比如.csv文件),能返回一個(gè)生成器,從其中解析出csv的內(nèi)容。
利用csv.reader函數(shù)讀取存儲(chǔ)數(shù)據(jù)集的文件的全部內(nèi)容,以行為單位,并存儲(chǔ)為列表,如例8-5-1所示。
例8-5-1csv.reader函數(shù)讀取存儲(chǔ)數(shù)據(jù)集的文件的全部內(nèi)容實(shí)例。上例中,使用csv.reader函數(shù),讀取csv文件,將文件逐行讀出后轉(zhuǎn)存到列表中,列表中的每一個(gè)元素也是列表,子列表其實(shí)就是csv文件中的某一行數(shù)據(jù)。8.5.2讀取csv數(shù)據(jù)
第二種方法是使用csv.DictReader函數(shù),該函數(shù)和csv.reader函數(shù)類似,接收一個(gè)可迭代的對(duì)象,返回一個(gè)生成器,生成OrderedDict有序字典,返回的每一個(gè)單元格都作為字典的值,而字典的鍵則是這個(gè)單元格的標(biāo)題(即列頭),如例8-5-2所示。
例8-5-2使用csv.DictReader函數(shù)讀取存儲(chǔ)數(shù)據(jù)集的文件的全部內(nèi)容實(shí)例。Python中的字典是無序的,因?yàn)樗前凑説ash來存儲(chǔ)的,但是Python中有個(gè)模塊collections(英文,收集,集合),里面自帶了一個(gè)子類OrderedDict,實(shí)現(xiàn)了對(duì)字典對(duì)象中元素的排序。OrderedDict也就是有序字典,OrderedDict是對(duì)字典的補(bǔ)充,它記住了字典元素的添加順序。8.5.2讀取csv數(shù)據(jù) OrderedDict是dict的子類,其最大的特征是,它可以“維護(hù)”添加key-value對(duì)的順序。簡單來說,就是先添加的key-value對(duì)排在前面,后添加的key-value對(duì)排在后面。由于OrderedDict能維護(hù)key-value對(duì)的添加順序,因此即使兩個(gè)OrderedDict中的key-value對(duì)完全相同,但只要它們的順序不同,程序在判斷它們是否相等時(shí)也依然會(huì)返回False。
上例中,使用csv.DictReader函數(shù),讀取csv文件,將文件讀出后轉(zhuǎn)存到列表中,將每一行數(shù)據(jù)分別讀出后,再將數(shù)據(jù)和標(biāo)題行一一對(duì)應(yīng),轉(zhuǎn)存在OrderedDict有序字典中,OrderedDict有序字典作為列表的元素,csv有幾行數(shù)據(jù)(不含標(biāo)題)就有幾個(gè)OrderedDict有序字典。OrderedDict有序字典的元素個(gè)數(shù)和csv文件的列數(shù)據(jù)對(duì)應(yīng),csv有幾列數(shù)據(jù)就建立幾個(gè)元素,列表中的每一個(gè)元素也是列表,子列表其實(shí)就是csv文件中的某一行數(shù)據(jù)。8.5.2讀取csv數(shù)據(jù)
和上例類似,可以用csv.DictReader函數(shù)讀取csv文件的某一列數(shù)據(jù),通過定義列的標(biāo)題進(jìn)行查詢,如例8-5-3所示。
例8-5-3讀取csv文件的一列數(shù)據(jù)操作實(shí)例。8.5.3寫入.csv文件1.列表數(shù)據(jù)寫入
對(duì)于列表形式的數(shù)據(jù),除了csv.writer函數(shù),還需要用到writerow函數(shù)將數(shù)據(jù)逐行寫入csv文件。利用csv.writer函數(shù)將數(shù)據(jù)寫入csv文件。
現(xiàn)采集有三個(gè)新數(shù)據(jù),需要添加到csv文件中,數(shù)據(jù)樣式定義如下:data1=[[4.0,3.0,1.2,0.2,'setosa'],[5.0,2.5,4,1,'versicolor'],[5.5,3,5,2,'virginica']]將數(shù)據(jù)讀取保存到原數(shù)據(jù)集中(為方便練習(xí)需要保留原csv文件,因此在下例中,將“file_csv.csv”復(fù)制為“test.csv”進(jìn)行練習(xí)),操作如例8-5-4所示。8.5.3寫入.csv文件
讀者可以打開test.csv文件,測(cè)試最終結(jié)果。注意程序運(yùn)行時(shí),test.csv文件不能打開,否則會(huì)報(bào)拒絕訪問錯(cuò)誤,異常提示信息如下:PermissionError:[Errno13]Permissiondenied:'test.csv’此時(shí)關(guān)閉test.csv文件即可。2.字典數(shù)據(jù)寫入
至于字典形式的數(shù)據(jù),csv模塊提供了csv.DictWriter函數(shù),除了提供open函數(shù)的參數(shù),還需要輸入字典所有的數(shù)據(jù),然后通過writeheader函數(shù)在文件內(nèi)添加標(biāo)題,標(biāo)題內(nèi)容與鍵一致,最后使用writerows函數(shù)將字典內(nèi)容寫入文件,如例8-5-5所示。importcsvfile_name='test.csv'my_data=[{'外長':4.0,'外寬':3.0,'內(nèi)長':1.2,'內(nèi)寬':0.2,'名稱':'setosa'},{'外長':5.0,'外寬':2.5,'內(nèi)長':4,'內(nèi)寬':1,'名稱':'versicolor'},{'外長':5.5,'外寬':3.5,'內(nèi)長':5,'內(nèi)寬':2,'名稱':'virginica'}]my_key=[]#定義空列表,用來存儲(chǔ)所讀取的鍵的集合foriinmy_data[0].keys():my_key.append(i)#填充列表,用來存儲(chǔ)所讀取的鍵print(my_key)withopen(file_name,'a',newline=
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 木制品加工分包合同
- 商鋪接盤協(xié)議書
- 業(yè)務(wù)銷售保證書寫作指導(dǎo)
- 定址選購協(xié)議格式
- 工程咨詢服務(wù)造價(jià)招標(biāo)文件編制
- 服務(wù)誠信保證書承諾
- 誠信可靠保證書
- 公司貸款合同范例
- 房產(chǎn)中介服務(wù)合同樣式
- 電纜采購協(xié)議模板
- 2024電化學(xué)儲(chǔ)能考試題庫含答案
- 教師教學(xué)創(chuàng)新團(tuán)隊(duì)工作總結(jié)
- 鑄牢中華民族共同體意識(shí)-考試復(fù)習(xí)題庫(含答案)
- 2024年6月廣東省高中學(xué)業(yè)水平考試物理試卷(附答案)
- 債務(wù)規(guī)劃債務(wù)管理方案
- 掀起冬季學(xué)習(xí)高潮課件
- 人教版九年級(jí)英語上冊(cè)閱讀理解10篇(含答案)
- 麻醉科技術(shù)操作規(guī)范2020版
- 外研版七年級(jí)上冊(cè)英語作文范文
- 《電工新技術(shù)介紹》課件
- 改革開放簡史智慧樹知到課后章節(jié)答案2023年下北方工業(yè)大學(xué)
評(píng)論
0/150
提交評(píng)論