版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
學院系部名稱主講:授課教師姓名Python基礎(chǔ)教程第8章文件處理
使用文件的目的就是把一些文件存放起來,可以讓程序下一次執(zhí)行時直接使用,而不必重新制作一份。文件的操作包括創(chuàng)建、打開、讀寫、命名、備份、刪除等。本章主要介紹文本文件和csv文件的操作。第8章文件處理【教學導航】學習目標1.了解并掌握文件的打開和關(guān)閉方法2.了解并掌握文件的讀寫方法3.了解os模塊4.了解并掌握重命名和刪除文件5.了解并掌握文件夾的操作6.了解并掌握csv文件操作教學重點文件的打開和關(guān)閉,文件讀寫,重命名和刪除文件,csv文件操作教學方式案例教學法、分組討論法、自主學習法、探究式訓練法課時建議6課時本章主要內(nèi)容重命名和刪除文件打開和關(guān)閉文件文件讀寫123Python文件夾操作4csv文件操作56實訓88.1打開和關(guān)閉文件
用Word軟件編寫一份文件,操作流程如下:打開Word軟件,新建一個Word文件,寫入個人簡歷信息,保存文件,關(guān)閉Word軟件。同樣,操作文件的整體過程與使用Word軟件編寫一份文件的過程相同:打開文件,或者新建立一個文件,讀/寫數(shù)據(jù),關(guān)閉文件。本節(jié)主要介紹Windows文件打開和關(guān)閉的方法。[學習目標]1.掌握open函數(shù)的使用2.了解file對象的屬性3.掌握close()函數(shù)方法4.了解并掌握使用with語句打開文件的方法8.1打開和關(guān)閉文件
如果要讀寫一個文件,首先要建立一個文件對象,再利用文件對象提供的方法對文件的數(shù)據(jù)進行讀寫操作。Python提供了必要的函數(shù)和方法進行默認情況下的文件基本操作。用file對象做大部分的文件操作。1.open函數(shù)
必須先用Python內(nèi)置的open()函數(shù)打開一個文件,創(chuàng)建一個file對象,相關(guān)的輔助方法才可以調(diào)用它進行讀寫,其語法為:open(文件名,訪問模式)代碼完整格式如下:fileobject=open(file_name[,access_mode][,buffering])8.1打開和關(guān)閉文件各個參數(shù)說明如下。
●file_name:file_name變量是一個包含了要訪問的文件名稱的字符串值。
●access_mode:access_mode用于決定打開文件的模式,即只讀、寫入、追加等,所有可取值如表8-1-1所列。這個參數(shù)是非強制的,默認文件訪問模式為只讀(r)。
●buffering:如果buffering的值被設(shè)為0,就不會有寄存操作。如果buffering的值取1,訪問文件時會寄存行;如果將buffering的值設(shè)為大于1的整數(shù),表明了寄存區(qū)的緩沖大??;如果buffering的值取負值,寄存區(qū)的緩沖大小則為系統(tǒng)默認。8.1打開和關(guān)閉文件
表8-1-1不同模式打開文件的完全列表模式描述r以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式rb以二進制格式打開一個文件用于只讀。文件指針將會放在文件的開頭。這是默認模式r+打開一個文件用于讀寫。文件指針將會放在文件的開頭rb+以二進制格式打開一個文件用于讀寫。文件指針將會放在文件的開頭w打開一個文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,則創(chuàng)建新文件wb以二進制格式打開一個文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,則創(chuàng)建新文件w+打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,則創(chuàng)建新文件8.1打開和關(guān)閉文件
表8-1-1不同模式打開文件的完全列表模式描述wb+以二進制格式打開一個文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,則創(chuàng)建新文件a打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結(jié)尾。也就是說,新的內(nèi)容將會被寫入到已有內(nèi)容之后。如果該文件不存在,則創(chuàng)建新文件進行寫入ab以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結(jié)尾。也就是說,新的內(nèi)容將會被寫入到已有內(nèi)容之后。如果該文件不存在,則創(chuàng)建新文件進行寫入a+打開一個文件用于讀寫。如果該文件已存在,文件指針將會放在文件的結(jié)尾,文件打開時采用的是追加模式。如果該文件不存在,則創(chuàng)建新文件用于讀寫ab+以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結(jié)尾。如果該文件不存在,則創(chuàng)建新文件用于讀寫8.1打開和關(guān)閉文件對文件的讀寫,顯然有一個從什么位置讀、寫到什么位置的問題。其實,文件對象隱含著一個指示文件內(nèi)數(shù)據(jù)位置的指針。當一個文件被打開,多數(shù)的打開方式將這個指針定位在文件的開始(即指向第0個位置),但對于設(shè)置了“a”的打開方式,則指針定位在文件的尾部(最后一個字節(jié)的下一個字節(jié))。文件對象反映的結(jié)果查看如例8-1-1所示。#在同一目錄下新建文本文件test.txt2.file對象的屬性一個文件被打開后,有一個file對象,可以得到有關(guān)該文件的各種信息。以下是與file對象相關(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#打開一個文件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輸出后,必須跟一個空格符,返回False,否則返回True8.1打開和關(guān)閉文件3.close()方法 file對象的close()方法用于刷新緩沖區(qū)中任何還沒寫入的信息,并關(guān)閉該文件,這之后便不能再進行寫入操作。當一個文件對象的引用被重新指定給另一個文件時,Python會關(guān)閉之前的文件。用close()方法關(guān)閉文件是一個很好的習慣。其語法為: fileObject.close();例8-1-3打開與關(guān)閉文件。 Python處理文件中的數(shù)據(jù),可以使用while語句來循環(huán)讀取文件中的行。例如:#coding=utf-8#打開一個文件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í)行文件打開操作,實現(xiàn)預定義清理操作,文件在使用后將自動關(guān)閉,不再需要書寫關(guān)閉文件代碼。 with語句的基本格式如下: with表達式[as對象]:
對象操作語句新建一文本文件Test.txt,在文件中輸入一行字符串“異常處理測試!”,在同一目錄下,新建py文件,使用with語句讀取Test.txt進行輸出。操作如例8-1-4所示。8.1打開和關(guān)閉文件
在例8-1-4中,首先打開當前工作目錄中的文件Test.txt,再將文件對象賦給變量f,最后執(zhí)行with語句下面的<語句塊>,輸出一行字符串。
使用with語句打開文件,如果文件正常,打開文件后,將文件對象賦值給f,然后用for循環(huán)語句循環(huán)輸出。當對文件的操作結(jié)束后,with語句會關(guān)閉文件。 with語句適用于對資源進行訪問的場合,確保不管使用過程中是否發(fā)生異常都會執(zhí)行必要的清理操作,釋放資源。with語句后的表達式,是上下文管理器。上下文管理器是Python2.5以后版本均支持的語法,用于規(guī)定某個對象的使用范圍,一旦進入或離開使用范圍,就有特殊的操作被調(diào)用。 with語句是Python異常處理機制的一個部分。8.2文件讀寫使用文件,主要是為了文件處理實現(xiàn)文件的讀寫等操作。本節(jié)主要介紹Python中讀寫文件和處理文件的方法。[學習目標]1.了解并掌握文件write()方法2.了解并掌握文件read()方法3.了解并掌握獲取文件讀寫位置的方法。4.了解并掌握文件內(nèi)容處理的方法5.了解并掌握文件備份的方法8.2文件讀寫 file對象提供了一系列方法,能讓我們的文件訪問更輕松。下面來看看如何使用read()和write()方法來讀取和寫入文件。1.write()方法write()方法可將任何字符串寫入一個打開的文件中。需要重點注意的是,Python字符串可以是二進制數(shù)據(jù),而不僅僅是文字。write()方法不在字符串的結(jié)尾添加換行符('\n'),其語法為: fileObject.write(string);
在這里,被傳遞的參數(shù)是要寫入到已打開文件中的內(nèi)容。
8.2文件讀寫2.read()方法 read()方法從一個打開的文件中讀取一個字符串。其語法為:fileObject.read([count]);
在這里,被傳遞的參數(shù)是要從已打開文件中讀取的字節(jié)計數(shù)。該方法從文件的開頭開始讀入,如果沒有傳入count,它會嘗試讀取盡可能多的內(nèi)容,很可能是直到文件的末尾,如例8-2-2所示。3.文件位置 tell()方法用于告訴文件內(nèi)的當前位置;換句話說,下一次的讀寫會發(fā)生在文件開頭多字節(jié)之后8.2文件讀寫 seek(offset[,from])方法用于改變當前文件的位置,其中,offset變量表示要移動的字節(jié)數(shù),from變量指定開始移動字節(jié)的參考位置。
如果from設(shè)為0,這意味著將文件的開頭作為移動字節(jié)的參考位置。如果設(shè)為1,則使用當前的位置作為參考位置。如果它被設(shè)為2,那么該文件的末尾將作為參考位置,如例8-2-3所示。
#coding=utf-8#打開一個文件f=open("f.txt","r+")str=f.read(10);print("ReadStringis:",str)#查找當前位置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)容處理
在前面的實例中,介紹了文件的讀寫操作。事實上,文件內(nèi)容數(shù)據(jù)處理,是文件操作的重要部分。以例8-2-4為例,打開文件后,迭代處理每一行數(shù)據(jù),并把每一行數(shù)據(jù)轉(zhuǎn)換為一個整數(shù),累加后進行輸出。
使用open函數(shù),在文件處理前需要打開文件,處理結(jié)束后需要關(guān)閉文件。在Python中,可以使用with語句來管理文件的打開和關(guān)閉。例8-2-4代碼可以改寫為例8-2-5所示代碼。8.2文件讀寫
例8-2-5使用withopen操作文件進行文件數(shù)據(jù)處理實例。5.文件備份
輸入需要備份的文件的名字,再利用程序?qū)ξ募M行備份。操作如例8-2-6所示。#輸入文件oldFileName=input("請輸入要備份的文件名字:")#打開文件oldFile=open(oldFileName,'rb')#提取文件后綴fileFlagNum=oldFileName.rfind('.')iffileFlagNum>0:fileFlag=oldFileName[fileFlagNum:]#新的文件命名方式newFileName=oldFileName[:fileFlagNum]+'[復件]'+fileFlag#創(chuàng)建新文件newFile=open(newFileName,'wb')#把舊文件中的數(shù)據(jù)一行一行復制到新文件中forlineinoldFile.readlines():newFile.write(line)#關(guān)閉文件oldFile.close()newFile.close()
8.3重命名和刪除文件有些時候,需要對文件進行重命名、刪除等操作,Python的os模塊是Python內(nèi)置的一個模塊,用來處理文件及目錄。os模塊功能強大,涵蓋了文件系統(tǒng)所有的處理方法。[學習目標]1.了解并熟悉os模塊操作函數(shù)2.了解并掌握文件的絕對路徑和拼接路徑3.了解并掌握文件獲得程序所在的實際目錄的方法4.了解并掌握文件重命名的方法5.了解并掌握批量文件重命名的方法6.了解并掌握刪除文件的方法8.3.1os模塊os模塊在使用之前需要導入,導入后建議使用dir命令查看os里面的子模塊和方法,如圖8-3-1所示os模塊的方法區(qū)分文件系統(tǒng),在Windows和Linux下方法功能相同,都用于提供系統(tǒng)級別的操作。os模塊操作函數(shù)如表8-3-1所示。
圖8-3-1os模塊方法和子模塊
8.3.1os模塊
表8-3-1os模塊操作函數(shù)一覽表函數(shù)說明os.getcwd()獲取當前工作目錄,即當前Python腳本工作的目錄路徑os.chdir("dirname")改變當前腳本工作目錄,相當于shell下的cd命令os.curdir返回當前目錄('.')os.pardir獲取當前目錄的父目錄字符串名('..')os.makedirs('dir1/dir2')可生成多層遞歸目錄os.removedirs('dirname1')若目錄為空,則刪除,并遞歸到上一級目錄,如若上一級目錄也為空,則刪除,依此類推os.mkdir('dirname')生成單級目錄,相當于shell中的mkdirdirname命令8.3.1os模塊
續(xù)表8-3-1os模塊操作函數(shù)一覽表函數(shù)說明os.rmdir('dirname')刪除單級空目錄,若目錄不為空則無法刪除,報錯,相當于shell中的rmdirdirname命令os.listdir('dirname')列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印os.remove()刪除一個文件os.rename("oldname","new")重命名文件/目錄os.stat('path/filename')獲取文件/目錄信息os.sep操作系統(tǒng)特定的路徑分隔符,Windows下為“\\”,Linux下為“/”os.linesep當前平臺使用的行終止符,Windows下為“\t\n”,Linux下為“\n”8.3.1os模塊
續(xù)表8-3-1os模塊操作函數(shù)一覽表函數(shù)說明os.pathsep用于分割文件路徑的字符串字符串指示當前使用平臺,Windows->'nt,Linux->'posix'os.system("bashcommand")運行shell命令,直接顯示os.environ獲取系統(tǒng)環(huán)境變量os.path.abspath(path)返回path規(guī)范化的絕對路徑os.path.split(path)將path分割成目錄和文件名二元組返回os.path.dirname(path)返回path的目錄。其實就是os.path.split(path)的第一個元素8.3.1os模塊
續(xù)表8-3-1os模塊操作函數(shù)一覽表函數(shù)說明os.path.basename(path)返回path最后的文件名。如果path以/或\結(jié)尾,那么就返回空值,即os.path.split(path)的第二個元素os.path.exists(path)如果path存在,返回True;如果path不存在,返回Falseos.path.isabs(path)如果path是絕對路徑,返回Trueos.path.isfile(path)如果path是一個存在的文件,返回True,否則返回Falseos.path.isdir(path)如果path是一個存在的目錄,返回True,否則返回Falseos.path.join(path1[,path2[,...]])將多個路徑組合后返回,第一個絕對路徑之前的參數(shù)將被忽略8.3.1os模塊
續(xù)表8-3-1os模塊操作函數(shù)一覽表2.模塊常用方法
在讀寫文件時,經(jīng)常需要用到文件的絕對路徑和相對路徑。絕對路徑是指從盤符開始的路徑,如“D:\python\例題”;相對路徑是指以當前目錄為參考的路徑,如“\例題”。使用os模塊可以獲取到當前文件的絕對路徑和拼接路徑,如例8-3-1和例8-3-2所示。
函數(shù)說明os.path.getatime(path)返回path所指向的文件或者目錄的最后存取時間os.path.getmtime(path)返回path所指向的文件或者目錄的最后修改時間8.3.1os模塊例8-3-1使用os模塊來獲取當前文件的絕對路徑并輸出文件內(nèi)容實例。上例中使用了os模塊的os.path.dirname(path)方法,獲取到當前目錄的絕對路徑,然后再獲取文件并按行進行輸出。例8-3-2使用os模塊來獲取當前文件的拼接路徑并輸出文件內(nèi)容實例。8.3.1os模塊上例中連續(xù)使用了os模塊的os.path.dirname(path)方法、os.path.dirname(os.path.dirname(__file__)),獲取到當前目錄的父目錄絕對路徑,然后再獲取文件并按行進行輸出。使用os模塊可以獲得程序所在的實際目錄,如例8-3-3所示。例8-3-3使用os模塊來獲取文件的實際目錄并輸出文件內(nèi)容實例。
8.3.2重命名和刪除文件操作Python的os模塊提供了執(zhí)行文件處理操作的方法,比如重命名和刪除文件。要使用這個模塊,必須先導入它(importos),然后再調(diào)用相關(guān)的各種功能。1.rename()方法
rename()方法需要兩個參數(shù),即當前的文件名和新文件名,其語法為: os.rename(current_file_name,new_file_name)將新建的一文本文件test1.txt,重命名為test2.txt,操作如例8-3-4所示。例8-3-4文件的重命名實例。2.remove()方法用remove()方法刪除文件,需要提供要刪除的文件名作為參數(shù),其語法為: os.remove(file_name)8.3.2重命名和刪除文件操作刪除一個已經(jīng)存在的文件test2.txt,操作如例8-3-5所示。
例8-3-5刪除文件實例。3.批量文件重命名
在很多時候,需要將某個文件夾下的文件按一定的規(guī)則重新命名。Python可能用這個簡單的程序,實現(xiàn)文件的批量命名操作。使用os模塊可以輕松批量為文件名添加前綴,操作如例8-3-6所示。
例8-3-6批量添加前綴實例。8.4Python文件夾操作有些時候,需要對文件進行重命名、刪除等操作,Python的os模塊是Python內(nèi)置的一個模塊,用來處理文件及目錄。os模塊功能強大,涵蓋了文件系統(tǒng)所有的處理方法。[學習目標]1.了解文件夾的基本操作2.了解并掌握os模塊目錄操作方法8.4Python文件夾操作
文件都包含在各個不同的目錄下,Python通過導入os模塊對文件和目錄進行操作。os模塊有許多方法能創(chuàng)建、刪除和更改目錄。1.mkdir()方法
可以使用os模塊的mkdir()方法在當前目錄下創(chuàng)建新的目錄,需要提供一個包含了要創(chuàng)建的目錄名稱的參數(shù),其語法為: os.mkdir("newdir")例8-4-1在當前目錄下創(chuàng)建一個新目錄(test)。8.4Python文件夾操作
2.chdir()方法
可以用chdir()方法來改變當前的目錄。chdir()方法需要的一個參數(shù)是想設(shè)成當前目錄的目錄名稱,其語法為:os.chdir("newdir")例8-4-2改變操作目錄(進入之前創(chuàng)建的"test"目錄)。3.getcwd()方法 getcwd()方法用于顯示當前的工作目錄,其語法為: os.getcwd()8.4Python文件夾操作例8-4-3給出當前目錄程序?qū)嵗?.rmdir()方法rmdir()方法用于刪除目錄,目錄名稱以參數(shù)傳遞。需要注意的是,在刪除這個目錄之前,它的所有內(nèi)容應(yīng)該先被清除。其語法為: os.rmdir('dirname’)例8-4-4刪除當前目錄程序?qū)嵗夸洷仨毥o出完整名稱,否則會在當前目錄下搜索該目錄。8.4Python文件夾操作使用os.rmdir刪除的目錄必須為空目錄,否則函數(shù)會報錯。如果刪除的目錄也不存在,也會報錯。5.listdir()方法listdir()方法用于返回當前目錄下的文件與子目錄名。例8-4-5返回當前目錄下的文件與子目錄名。6.文件、目錄相關(guān)的方法 os對象方法對Windows和UNIX操作系統(tǒng)上的文件及目錄進行一個廣泛且實用的處理及操控,和file對象方法有一定差別,兩者的比較如下所述。8.4Python文件夾操作 file對象方法:file對象提供了操作文件的一系列方法。 os對象方法:提供了處理文件及目錄的一系列方法。8.5csv文件操作csv文件由任意數(shù)目的記錄組成,記錄間以某種換行符分隔,每條記錄由字段組成。本節(jié)介紹csv文件的基礎(chǔ)操作。[學習目標]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,逗號分隔值,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數(shù)據(jù)(數(shù)字和文本)。純文本意味著該文件是一個字符序列。csv文件由任意數(shù)目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其他字符或字符串,最常見的是逗號或制表符。通常,所有記錄都有完全相同的字段序列,通常都是純文本文件。建議使用Word或記事本來開啟,在另存為新文檔后用Excel開啟也是方法之一。 csv是一種通用的、相對簡單的文件格式,被用戶、商業(yè)和科學廣泛應(yīng)用。最廣泛的應(yīng)用是在程序之間轉(zhuǎn)移表格數(shù)據(jù),而這些程序本身是在不兼容的格式上進行操作的(往往是私有的和/或無規(guī)范的格式)。因為大量程序都支持某種csv變體,至少是作為一種可選擇的輸入/輸出格式。8.5.1csv數(shù)據(jù)
例如,一個用戶可能需要交換信息,從一個以私有格式存儲數(shù)據(jù)的數(shù)據(jù)庫程序,到一個數(shù)據(jù)格式完全不同的電子表格。最可能的情況是,該數(shù)據(jù)庫程序可以導出數(shù)據(jù)為csv文件,然后被導出的csv文件可以以電子表格程序?qū)搿sv并不是一種單一的、定義明確的格式(RFC4180中有一個被通常使用的定義)。在實踐中,csv泛指具有以下特征的任何文件:
●純文本,使用某個字符集,比如ASCII、Unicode、EBCDIC或GB2312。
●由記錄組成(典型的是每行一條記錄)。
●每條記錄被分隔符分隔為字段(典型分隔符有逗號、分號或制表符;有時分隔符可以包括空格)。
●每條記錄都有同樣的字段序列。在編寫程序時,可能需要將數(shù)據(jù)轉(zhuǎn)移到文件里面,此時可以考慮使用內(nèi)置模塊—csv模塊。在程序中,用命令importcsv可直接調(diào)用csv模塊進行csv文件的讀寫。8.5.2讀取csv數(shù)據(jù)在讀取csv數(shù)據(jù)之前,先選擇一個用csv文件格式儲存的數(shù)據(jù)作為演示的例子,這里選擇數(shù)據(jù)集文件。數(shù)據(jù)集是常用的分類實驗數(shù)據(jù)集,分為3類(Setosa、Versicolour、Virginica),每個數(shù)據(jù)包含4個屬性:外長、外寬、內(nèi)長、內(nèi)寬?,F(xià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ù),接收一個可迭代的對象(比如.csv文件),能返回一個生成器,從其中解析出csv的內(nèi)容。
利用csv.reader函數(shù)讀取存儲數(shù)據(jù)集的文件的全部內(nèi)容,以行為單位,并存儲為列表,如例8-5-1所示。
例8-5-1csv.reader函數(shù)讀取存儲數(shù)據(jù)集的文件的全部內(nèi)容實例。上例中,使用csv.reader函數(shù),讀取csv文件,將文件逐行讀出后轉(zhuǎn)存到列表中,列表中的每一個元素也是列表,子列表其實就是csv文件中的某一行數(shù)據(jù)。8.5.2讀取csv數(shù)據(jù)
第二種方法是使用csv.DictReader函數(shù),該函數(shù)和csv.reader函數(shù)類似,接收一個可迭代的對象,返回一個生成器,生成OrderedDict有序字典,返回的每一個單元格都作為字典的值,而字典的鍵則是這個單元格的標題(即列頭),如例8-5-2所示。
例8-5-2使用csv.DictReader函數(shù)讀取存儲數(shù)據(jù)集的文件的全部內(nèi)容實例。Python中的字典是無序的,因為它是按照hash來存儲的,但是Python中有個模塊collections(英文,收集,集合),里面自帶了一個子類OrderedDict,實現(xiàn)了對字典對象中元素的排序。OrderedDict也就是有序字典,OrderedDict是對字典的補充,它記住了字典元素的添加順序。8.5.2讀取csv數(shù)據(jù) OrderedDict是dict的子類,其最大的特征是,它可以“維護”添加key-value對的順序。簡單來說,就是先添加的key-value對排在前面,后添加的key-value對排在后面。由于OrderedDict能維護key-value對的添加順序,因此即使兩個OrderedDict中的key-value對完全相同,但只要它們的順序不同,程序在判斷它們是否相等時也依然會返回False。
上例中,使用csv.DictReader函數(shù),讀取csv文件,將文件讀出后轉(zhuǎn)存到列表中,將每一行數(shù)據(jù)分別讀出后,再將數(shù)據(jù)和標題行一一對應(yīng),轉(zhuǎn)存在OrderedDict有序字典中,OrderedDict有序字典作為列表的元素,csv有幾行數(shù)據(jù)(不含標題)就有幾個OrderedDict有序字典。OrderedDict有序字典的元素個數(shù)和csv文件的列數(shù)據(jù)對應(yīng),csv有幾列數(shù)據(jù)就建立幾個元素,列表中的每一個元素也是列表,子列表其實就是csv文件中的某一行數(shù)據(jù)。8.5.2讀取csv數(shù)據(jù)
和上例類似,可以用csv.DictReader函數(shù)讀取csv文件的某一列數(shù)據(jù),通過定義列的標題進行查詢,如例8-5-3所示。
例8-5-3讀取csv文件的一列數(shù)據(jù)操作實例。8.5.3寫入.csv文件1.列表數(shù)據(jù)寫入
對于列表形式的數(shù)據(jù),除了csv.writer函數(shù),還需要用到writerow函數(shù)將數(shù)據(jù)逐行寫入csv文件。利用csv.writer函數(shù)將數(shù)據(jù)寫入csv文件。
現(xiàn)采集有三個新數(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ù)集中(為方便練習需要保留原csv文件,因此在下例中,將“file_csv.csv”復制為“test.csv”進行練習),操作如例8-5-4所示。8.5.3寫入.csv文件
讀者可以打開test.csv文件,測試最終結(jié)果。注意程序運行時,test.csv文件不能打開,否則會報拒絕訪問錯誤,異常提示信息如下:PermissionError:[Errno13]Permissiondenied:'test.csv’此時關(guān)閉test.csv文件即可。2.字典數(shù)據(jù)寫入
至于字典形式的數(shù)據(jù),csv模塊提供了csv.DictWriter函數(shù),除了提供open函數(shù)的參數(shù),還需要輸入字典所有的數(shù)據(jù),然后通過writeheader函數(shù)在文件內(nèi)添加標題,標題內(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=[]#定義空列表,用來存儲所讀取的鍵的集合foriinmy_data[0].keys():my_key.append(i)#填充列表,用來存儲所讀取的鍵print(my_key)withopen(file_name,'a',newline=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024司機聘用合同
- 挖掘機租賃市場合同樣本
- 2024年房屋經(jīng)紀服務(wù)合同
- 2024競價房屋買賣合同范本
- 江蘇省徐州市七年級上學期語文期中試卷5套【附答案】
- 2024【股權(quán)投資信托合同】股權(quán)投資合同
- 施工安全協(xié)議書案例分析
- 專業(yè)咨詢委托協(xié)議參考
- 房屋買賣合同協(xié)議書委托人2024年
- 標準的汽車租賃合同范本
- 2024年宏觀經(jīng)濟發(fā)展情況分析報告
- 攝影入門課程-攝影基礎(chǔ)與技巧全面解析
- 251直線與圓的位置關(guān)系(第1課時)(導學案)(原卷版)
- XX有限公司人員分流方案
- 大語言模型賦能自動化測試實踐、挑戰(zhàn)與展望-復旦大學(董震)
- 期中模擬檢測(1-3單元)2024-2025學年度第一學期西師大版二年級數(shù)學
- 形勢與政策(吉林大學)智慧樹知到答案2024年吉林大學
- 2024年“正大杯”市場調(diào)查與分析競賽考試題庫及答案
- 二年級100以內(nèi)加減乘除混合口算題(直接打印)
- 人教版九年級英語上冊閱讀理解10篇(含答案)
- 《思想道德與法治》課件第四章明確價值要求踐行價值準則第三節(jié)積極踐行社會主義核心價值觀
評論
0/150
提交評論