第8章 文件和數(shù)據(jù)格式化_第1頁
第8章 文件和數(shù)據(jù)格式化_第2頁
第8章 文件和數(shù)據(jù)格式化_第3頁
第8章 文件和數(shù)據(jù)格式化_第4頁
第8章 文件和數(shù)據(jù)格式化_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第8章文件和數(shù)據(jù)格式化文件概述文件的基本操作文件的迭代實例10:用戶登錄數(shù)據(jù)維度與數(shù)據(jù)格式化Python中的json模塊學(xué)習(xí)目標了解掌握熟悉掌握了解文本文件和二進制文件的意義12熟悉管理文件與目錄掌握JSON數(shù)據(jù)的組織形式、Python數(shù)據(jù)與JSON數(shù)據(jù)的轉(zhuǎn)換34掌握文件的基本操作目錄?點擊查看本節(jié)相關(guān)知識點文件的基本操作8.28.1文件概述8.3文件迭代8.4實例10:用戶登錄目錄Python中的json模塊8.68.5數(shù)據(jù)維度與數(shù)據(jù)格式化?點擊查看本節(jié)相關(guān)知識點知識架構(gòu)8.2文件的基本操作1文件的打開和關(guān)閉2讀文件3寫文件4文件讀寫位置5管理文件和目錄知識架構(gòu)1基于維度的數(shù)據(jù)分類2一二維數(shù)據(jù)的存儲與讀寫3多維數(shù)據(jù)的格式化8.5

數(shù)據(jù)維度與數(shù)據(jù)格式化8.1文件概述計算機中文件的定義計算機中的文件是以硬盤等外部介質(zhì)為載體,存儲在計算機中的數(shù)據(jù)的集合。文本文檔、圖片、程序、音頻等都是文件。8.1文件概述文件概述文件標識的意義:找到計算機中唯一確定的文件。文件標識的組成:文件路徑、文件名主干、文件擴展名。1.文件標識操作系統(tǒng)以文件為單位對數(shù)據(jù)進行管理。8.1文件概述文件概述按照編碼方式的不同,計算機中的文件分為:文本文件。以“行”為基本結(jié)構(gòu)組織和存儲數(shù)據(jù),常用編碼有ASCII碼、UNICODE碼、UTF-8等。二進制文件。以二進制形式編碼存儲在計算機中,一般是可執(zhí)行文件、圖像、聲音、視頻等。2.文件類型注意:計算機在物理層面上以二進制形式存儲數(shù)據(jù);文本文件與二進制文件的區(qū)別不在于物理上的存儲方式,而是邏輯上數(shù)據(jù)的組織方式。8.1文件概述示例:使用不同編碼方式存儲整數(shù)112185文本文件存放形式二進制文件存放形式8.1文件概述文件概述Python的sys模塊中定義了3個標準文件,分別為:stdin(標準輸入文件)。標準輸入文件對應(yīng)輸入設(shè)備,如鍵盤。stdout(標準輸出文件)。stderr(標準錯誤文件)。標準輸出文件和標準錯誤文件對應(yīng)輸出設(shè)備,如顯示器。3.標準文件在解釋器中導(dǎo)入sys模塊后,便可對標準文件進行操作。示例:使用標準輸出文件>>>importsys>>>file=sys.stdout>>>file.write("hello") #向標準輸出文件寫入hellohello58.1文件概述多學(xué)一招:計算機中的流“流”是在不同的輸入/輸出等設(shè)備(鍵盤、內(nèi)存、顯示器等)之間進行傳遞的數(shù)據(jù)的抽象。輸入函數(shù)的字節(jié)序列被稱為輸入流,輸出函數(shù)的字節(jié)序列被稱為輸出流。在計算機中傳輸?shù)臄?shù)據(jù)如同在管道中流動的水,根據(jù)數(shù)據(jù)形式,輸入輸出流可分為:文本流。文本流中輸入輸出的數(shù)據(jù)是是字符或字符串,可以被修改;二進制流。二進制流中輸入輸出的是一系列字節(jié),不能以任何方式修改。8.2文件的基本操作打開關(guān)閉讀寫文件的基本操作創(chuàng)建刪除重命名文件目錄對計算機而言,目錄是文件的數(shù)據(jù)集合,它實質(zhì)上也是一種文件。通過Python的內(nèi)置方法和os模塊中定義的方法可以操作文件。8.2文件的基本操作打開文件——open()函數(shù)內(nèi)置函數(shù)open()用于打開文件,該方法的聲明如下:open(file,mode='r',buffering=-1)file:文件的路徑。mode:設(shè)置文件的打開模式,取值有r、w、a、b、+。buffering:設(shè)置訪問文件的緩沖方式。取值為0或1。參數(shù)含義:返回值含義:成功打開文件,會返回一個文件流;若待打開的文件不存在,open()函數(shù)會拋出IOError,設(shè)置錯誤碼Errno并打印錯誤信息。r:以只讀方式打開文件(mode參數(shù)的默認值)。w:以只寫方式打開文件。a:以追加方式打開文件。b:以二進制形式打開文件。+:以更新的方式打開文件(可讀可寫)。8.2文件的基本操作文件打開模式打開模式含義說明r/rb只讀模式以只讀的形式打開文本文件/二進制文件,如果文件不存在或無法找到,open()調(diào)用失敗w/wb只寫模式以只寫的形式打開文本文件/二進制文件,如果文件已存在,清空文件;若文件不存在則創(chuàng)建文件a/ab追加模式以只寫的形式打開文本文件/二進制文件,只允許在該文件末尾追加數(shù)據(jù),如果文件不存在,則創(chuàng)建新文件r+/rb+讀取(更新)模式以讀/寫的形式打開文本文件/二進制文件,如果文件不存在,open()調(diào)用失敗w+/wb+寫入(更新)模式以讀/寫的形式創(chuàng)建文本文件/二進制文件,如果文件已存在,則清空文件a+/ab+追加(更新)模式以讀/寫的形式打開文本/二進制文件,但只允許在文件末尾添加數(shù)據(jù),若文件不存在,則創(chuàng)建新文件8.2文件的基本操作文件的緩沖方式buffering設(shè)置為0,表示采用非緩沖方式;若設(shè)置為1,表示每次緩沖一行數(shù)據(jù);若設(shè)置為大于1的值,表示使用給定值作為緩沖區(qū)的大??;若參數(shù)buffering缺省,或被設(shè)置為負值時,表示使用默認緩沖機制(由設(shè)備類型決定)。示例:使用open()函數(shù)打開文件,并將文件流賦給文件對象file1=open('a.txt') #以只讀方式打開文本文件a.txtfile2=open('b.txt','w') #以只寫方式打開文本文件b.txtfile3=open('c.txt','w+') #以讀/寫方式打開文本文件c.txtfile1=open('a.txt','wb+') #以讀/寫方式打開二進制文件d.txt8.2文件的基本操作關(guān)閉文件——close()方法close()方法用于關(guān)閉文件,該方法的用法如下:file1.close()實現(xiàn)文件的自動關(guān)閉。with語句withopen('a.txt')asf:代碼段8.2文件的基本操作多學(xué)一招:文件系統(tǒng)分類系統(tǒng)會在內(nèi)存中為正在處理的程序開辟一段空間作為緩沖區(qū)內(nèi)核先將磁盤數(shù)據(jù)讀到輸入緩沖區(qū)中程序從緩沖區(qū)中讀取數(shù)據(jù)緩沖區(qū)為空時,內(nèi)核再次訪問磁盤緩沖文件系統(tǒng)(標準I/O)每次讀取數(shù)據(jù)都要訪問磁盤與緩沖文件系統(tǒng)相比,內(nèi)存與磁盤間的讀寫時間消耗更大非緩沖文件系統(tǒng)(系統(tǒng)I/O)8.2文件的基本操作讀文件Python中讀取文件內(nèi)容的方法有很多,其中最常用的有:read()。從指定文件讀取指定字節(jié)的數(shù)據(jù)。readline()。從指定文件讀取一行數(shù)據(jù)。readlines()。讀取指定文件中的全部數(shù)據(jù),并按行存儲到列表之中。8.2文件的基本操作寫文件Python可通過write()方法向文件中寫入數(shù)據(jù),write()方法的定義如下:write(str)8.2文件的基本操作數(shù)據(jù)的即時寫入若要將數(shù)據(jù)即時寫入文件,可以使用以下三種方法。修改open()函數(shù)的buffering參數(shù)刷新緩沖區(qū)——flush()方法關(guān)閉文件(自動刷新緩沖區(qū))8.2文件的基本操作文件讀寫位置每個文件對象都有一個稱為“文件讀寫位置”的屬性,該屬性用于記錄文件當前讀寫的位置。文件讀寫相關(guān)方法tell()方法——獲取文件當前的讀寫位置seek()方法——設(shè)置文件的讀寫位置8.2文件的基本操作seek()方法seek()方法的聲明如下:seek(offset,from)offset:偏移量,即讀寫位置需要移動的字節(jié)數(shù)。from:指定文件的讀寫位置,取值為0、1、2,它們代表的含義如下所示。參數(shù)含義:0:表示文件開頭。1:表示使用當前讀寫位置。2:表示文件末尾。調(diào)用成功后會返回當前讀寫位置。返回值:8.2文件的基本操作多學(xué)一招:文件對象的方法和屬性除open()、close()、write()和read()系列函數(shù)或方法之外,文件還有一些相關(guān)的內(nèi)置方法和屬性,這些方法和屬性的名稱及功能分別如表所示。分類名稱功能方法fileno()返回底層文件的文件描述符(文件系統(tǒng)中已打開文件的唯一標識)readable()若文件對象已打開且等待讀取,則返回True,否則返回Falseseekable()判斷文件是否支持隨機讀寫,則返回True,否則返回Falsetruncate(size)截取文件到當前文件讀寫位置,若給定size,則截取size字節(jié)的文件__next__()返回文件對象的下一行屬性mode獲取文件對象的打開模式name獲取文件對象的文件名encoding獲取文件使用的編碼格式closed若文件已關(guān)閉則返回True,否則返回False8.2文件的基本操作管理文件與目錄刪除文件——remove(文件名)文件重命名——rename(原文件名,新文件名)創(chuàng)建/刪除目錄——os.mkdir(目錄名)/os.rmdir(目錄名)獲取當前目錄——os.getcwd()更改默認目錄——os.chdir(路徑名)獲取目錄列表——os.listdir(目錄/路徑)8.3文件迭代文件迭代迭代是一個過程的多次重復(fù)Python中實現(xiàn)了__iter__()方法的對象都是可迭代對象(如序列、字典等)文件對象也是一個可迭代對象迭代器有“記憶”功能示例:在兩個有先后次序關(guān)系的循環(huán)中以迭代的方式各打印兩行文件內(nèi)容。8.4實例10:用戶登錄實例10:用戶登錄編程程序,實現(xiàn)用戶登錄界面。需求:分析:用戶登錄功模塊分為管理員登錄和普通用戶登錄,在用戶使用軟件時,系統(tǒng)會先判斷用戶是否為首次使用:若是首次使用,則進行初始化,否則進入用戶類型選擇。用戶類型分為管理員和普通用戶兩種,若選擇管理員,則直接進行登錄;若選擇普通用戶,先詢問用戶是否需要注冊,若需要注冊,先注冊用戶再進行登錄。8.5數(shù)據(jù)維度與數(shù)據(jù)格式化維度從廣義上講,維度是與事物“有聯(lián)系”的概念的數(shù)量,根據(jù)“有聯(lián)系”的概念的數(shù)量,事物可分為不同維度。8.5數(shù)據(jù)維度與數(shù)據(jù)格式化基于維度的數(shù)據(jù)分類根據(jù)組織數(shù)據(jù)時與數(shù)據(jù)有聯(lián)系的參數(shù)的數(shù)量,數(shù)據(jù)可分為一維數(shù)據(jù)、二維數(shù)據(jù)和多維數(shù)據(jù)。具有對等關(guān)系的一組線性數(shù)據(jù),如:一維列表一維元組集合一維數(shù)據(jù)二維數(shù)據(jù)關(guān)聯(lián)參數(shù)的數(shù)量為2,如:矩陣二維數(shù)組二維列表二維元組二維數(shù)據(jù)利用鍵值對等簡單的二院關(guān)系展示數(shù)據(jù)間的復(fù)雜結(jié)構(gòu),如:字典多維數(shù)據(jù)8.5數(shù)據(jù)維度與數(shù)據(jù)格式化示例成都,杭州,重慶,武漢,蘇州,西安,天津,南京,鄭州,長沙,沈陽,青島,寧波,東莞,無錫一維數(shù)據(jù)二維數(shù)據(jù)8.5數(shù)據(jù)維度與數(shù)據(jù)格式化示例“高三一班考試成績”:[ {“姓名”:“劉婧”, “語文”:“124”, “數(shù)學(xué)”:“137”, “英語”:“145”, “理綜”:“260”}; {“姓名”:“張華”, “語文”:“116”, “數(shù)學(xué)”:“143”, “英語”:“139”, “理綜”:“263”};

…… ]多維數(shù)據(jù)8.5數(shù)據(jù)維度與數(shù)據(jù)格式化一二維數(shù)據(jù)的存儲與讀寫一維數(shù)據(jù)呈線性排列,一般用特殊字符分隔,例如:使用空格分隔:成都杭州重慶武漢蘇州西安天津使用逗號分隔:成都,杭州,重慶,武漢,蘇州,西安,天津使用&分隔:成都&杭州&重慶&武漢&蘇州&西安&天津1.數(shù)據(jù)存儲一維數(shù)據(jù)的存儲需要注意以下幾點:同一文件或同組文件一般使用同一分隔符分隔。分隔數(shù)據(jù)的分隔符不應(yīng)出現(xiàn)在數(shù)據(jù)中。分隔符為英文半角符號,一般不使用中文符號作為分隔符。8.5數(shù)據(jù)維度與數(shù)據(jù)格式化一二維數(shù)據(jù)的存儲與讀寫二維數(shù)據(jù)可視為多條一維數(shù)據(jù)的集合,當二維數(shù)據(jù)只有一個元素時,這個二維數(shù)據(jù)就是一維數(shù)據(jù)。CSV(Commae-SeparetedValues,逗號分隔值)是國際上通用的一二維數(shù)據(jù)存儲格式。1.數(shù)據(jù)存儲CSV格式規(guī)范:以純文本形式存儲表格數(shù)據(jù)文件的每一行對應(yīng)表格中的一條數(shù)據(jù)記錄每條記錄由一個或多個字段組成字段之間使用逗號(英文、半角)分隔8.5數(shù)據(jù)維度與數(shù)據(jù)格式化一二維數(shù)據(jù)的存儲與讀寫1.數(shù)據(jù)存儲CSV也稱字符分隔值,具體示例如下:姓名,語文,數(shù)學(xué),英語,理綜劉婧,124,137,145,260張華,116,143,139,263邢昭林,120,130,148,255鞠依依,115,145,131,240黃麗萍,123,108,121,235趙越,132,100,112,2108.5數(shù)據(jù)維度與數(shù)據(jù)格式化一二維數(shù)據(jù)的存儲與讀寫2.數(shù)據(jù)讀取Windows平臺中CSV文件的后綴名為.csv,可通過OfficeExcel或記事本打開Python在程序中讀取.csv文件后會以二維列表形式存儲其中內(nèi)容示例csv_file=open('score.csv')lines=[]forlineincsv_file: line=line.replace('\n','') lines.append(line.split(','))print(lines)csv_file.close()8.5數(shù)據(jù)維度與數(shù)據(jù)格式化一二維數(shù)據(jù)的存儲與讀寫3.數(shù)據(jù)寫入將一、二維數(shù)據(jù)寫入文件中,即按照數(shù)據(jù)的組織形式,在文件中添加新的數(shù)據(jù)。示例:在保存學(xué)生成績的文件score.csv中寫入每名學(xué)生的總分。8.5數(shù)據(jù)維度與數(shù)據(jù)格式化多學(xué)一招:RFC4180CSV格式標準每一行記錄為單獨一行,用回車換行符(\r\n)分隔。文件中最后一行記錄可以有回車換行符,也可以沒有。第一行為可選的標題頭,此行格式與普通記錄格式相同。標題頭要包含文件記錄字段對應(yīng)的名稱,且與記錄字段一一對應(yīng)。包括標題頭在內(nèi)的每行記錄都存在一個或多個由半角逗號分隔的字段,整個文件中每行包含相同數(shù)量的字段;空格也是字段的一部分,不應(yīng)被忽略;每一行記錄最后一個字段后不需要逗號。每個字段可用(也可以不用)英文半角雙引號(“”)括起來,如果字段沒有使用雙引號,那么該字段內(nèi)部不能出現(xiàn)雙引號字符。字段中若包含回車換行符、雙引號或逗號,該字段需要用雙引號括起來。如果用雙引號括起字段,那么出現(xiàn)在字段內(nèi)的雙引號前必須加一個雙引號(如:“alpha”,“eir““c”,“mike”)進行轉(zhuǎn)義。8.5數(shù)據(jù)維度與數(shù)據(jù)格式化多維數(shù)據(jù)的格式化為了直觀地表示多維數(shù)據(jù),也為了便于組織和操作,三維及以上的多維數(shù)據(jù)統(tǒng)一采用鍵值對的形式進行格式化。網(wǎng)絡(luò)平臺上傳遞的數(shù)據(jù)大多是高維數(shù)據(jù),JSON是網(wǎng)絡(luò)中常見的高維數(shù)據(jù)格式。JSON格式的數(shù)據(jù)遵循以下語法規(guī)則:數(shù)據(jù)存儲在鍵值對(key:value)中,例如“姓名”:“張華”。數(shù)據(jù)的字段由逗號分隔,例如“姓名”:“張華”,“語文”:“116”。一個花括號保存一個JSON對象,例如{“姓名”:“張華”,“語文”:“116”}。一個方括號保存一個數(shù)組,例如[{“姓名”:“張華”,“語文”:“116”}]。8.5數(shù)據(jù)維度與數(shù)據(jù)格式化示例:“高三二班考試成績”:[ {“姓名”:“陳誠”, “語文”:“124”, “數(shù)學(xué)”:“127”, “英語”:“145”, “理綜”:“259”}; {“姓名”:“黃思”, “語文”:“116”, “數(shù)學(xué)”:“143”, “英語”:“119”, “理綜”:“273”};

…… ]8.5數(shù)據(jù)維度與數(shù)據(jù)格式化示例:將學(xué)生成績以XML格式存儲<高三二班考試成績> <姓名>陳誠</姓名><語文>124</語文><數(shù)學(xué)>127<數(shù)學(xué)/><英語>145<英語/><理綜>259<理綜/> <姓名>黃思</姓名><語文>116</語文><數(shù)學(xué)>143<數(shù)學(xué)/><英語>119<英語/><理綜>273<理綜/> ……</高三二班考試成績>8.6

Python中的json模塊JSON模塊——json利用json模塊的dumps()函數(shù)和loads()函數(shù)可以實現(xiàn)Python對象和JSON數(shù)據(jù)之間的轉(zhuǎn)換,這兩個函數(shù)的具體功能如表所示。函數(shù)功能dumps()對Python對象進行轉(zhuǎn)碼,將其轉(zhuǎn)化為JSON字符串loads()將JSON字符串解析為Python對象8.6

Python中的json模塊Python對象與JSON數(shù)據(jù)轉(zhuǎn)化時的類型對照表Python對象JSON數(shù)據(jù)dictobjectlist,tuplearraystr,unicodestringint,long,floatnumber

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論