Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第7、8章 數(shù)據(jù)處理、數(shù)據(jù)可視化_第1頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第7、8章 數(shù)據(jù)處理、數(shù)據(jù)可視化_第2頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第7、8章 數(shù)據(jù)處理、數(shù)據(jù)可視化_第3頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第7、8章 數(shù)據(jù)處理、數(shù)據(jù)可視化_第4頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第7、8章 數(shù)據(jù)處理、數(shù)據(jù)可視化_第5頁(yè)
已閱讀5頁(yè),還剩314頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7章數(shù)據(jù)處理文本文件CSV格式文件JSON文件文件與文件夾操作numpypandas7.17.27.37.47.57.6學(xué)習(xí)引導(dǎo)…了解…理解…掌握…運(yùn)用7.1文本文件7.1文本文件文件的概念文件是指為了重復(fù)使用或長(zhǎng)期使用的目的,存放于外部存儲(chǔ)器中的數(shù)據(jù)保存形式。文本文件二進(jìn)制文件7.1文本文件文本文件存儲(chǔ)常規(guī)的中西文字符、數(shù)字、標(biāo)點(diǎn)等符號(hào),換行常用符號(hào)'\n'表示。使用普通文本編輯工具打開和編輯,人們可以直接閱讀和理解文件內(nèi)容。文本文件(txt)、逗號(hào)分隔值(csv)、日志文件(log)、配置文件(ini)等。7.1文本文件二進(jìn)制文件數(shù)據(jù)以二進(jìn)制的形式存儲(chǔ)。讀取此類文件需要能夠解析二進(jìn)制數(shù)據(jù)的結(jié)構(gòu)和含義的應(yīng)用軟件。圖片文件(jpeg)、視頻文件(mpeg)、Windows下的可執(zhí)行文件(exe)等。7.1文本文件文件寫入或讀取操作過(guò)程(1)打開文件并創(chuàng)建文件對(duì)象;(2)通過(guò)文件對(duì)象對(duì)文件中的內(nèi)容進(jìn)行讀取和寫入等操作;(3)關(guān)閉并保存文件內(nèi)容。7.1.1文件的打開file參數(shù)是一個(gè)帶路徑的文件名可以帶一個(gè)從根目錄開始的絕對(duì)路徑,如'c:\\temp\\temp.txt'或相對(duì)當(dāng)前打開文件所在路徑的相對(duì)路徑,如./temp.txt當(dāng)打開的文件與當(dāng)前程序文件在同一路徑下時(shí),不需要寫路徑考慮到程序的可移植性,一般建議使用相對(duì)路徑。

fr=open(file,mode='r',encoding=None)內(nèi)置函數(shù)open()

將文件以文本形式或二進(jìn)制形式打開7.1.1文件的打開mode參數(shù)是可選參數(shù),用于指定文件打開的方式和類型缺省時(shí)使用默認(rèn)值'r',以只讀方式打開。該參數(shù)可以使用的符號(hào)包括'r'、'w'、'x'、'a'、'b'、't'、'+'等符號(hào)。Python嚴(yán)格區(qū)分二進(jìn)制和文本輸入輸出用二進(jìn)制模式打開文件時(shí),不做任何解碼,直接用二進(jìn)制對(duì)象返回文件內(nèi)容用文本模式打開文件時(shí),先用平臺(tái)默認(rèn)的編碼方式或encoding參數(shù)指定的編碼方式,對(duì)字節(jié)流進(jìn)行解碼,再用字符串形式返回文件內(nèi)容。

fr=open(file,mode='r',encoding=None)內(nèi)置函數(shù)open()

將文件以文本形式或二進(jìn)制形式打開7.1.1文件的打開符號(hào)含義'r'以只讀模式打開文件(默認(rèn)值)'w'以寫數(shù)據(jù)模式打開文件,該文件已存在,先清除該文件中所有內(nèi)容;該文件不存在,先創(chuàng)建該文件再打開。'x'以創(chuàng)建文件寫數(shù)據(jù)模式打開文件,該文件已存在,打開失敗。'a'以追加寫數(shù)據(jù)模式打開文件,該文件已存在,新數(shù)據(jù)追加在現(xiàn)有數(shù)據(jù)之后;該文件不存在,先創(chuàng)建文件后在打開。'b'以二進(jìn)制模式打開文件處理數(shù)據(jù)'t'以文本模式打開文件處理數(shù)據(jù)(默認(rèn)模式)'+'打開文件并允許更新,相當(dāng)于增加讀或?qū)懩J剑ㄅc'r'、'w'或'a'組合使用,如'r+'可讀可寫、'w+'可寫可讀、'a+'可追加寫,可讀)mode參數(shù)符號(hào)含義7.1.1文件的打開encoding參數(shù)是可選參數(shù),用于標(biāo)明打開文本文件時(shí),采用何種字符編碼處理數(shù)據(jù)encoding參數(shù)缺省時(shí),表示使用當(dāng)前操作系統(tǒng)默認(rèn)編碼類型(中文windows10一般默認(rèn)GBK編碼,Mac和Linux等一般默認(rèn)編碼為UTF-8編碼)UTF-8用1到6個(gè)字節(jié)編碼Unicode字符,包含全世界所有國(guó)家需要用到的字符。Python3推薦使用UTF-8編碼,創(chuàng)建文本文件時(shí),建議指定使用UTF-8編碼,以方便其他用戶和程序訪問(wèn)該文件。當(dāng)使用二進(jìn)制模式打開文件時(shí),encoding參數(shù)不可使用

fr=open(file,mode='r',encoding=None)內(nèi)置函數(shù)open()

將文件以文本形式或二進(jìn)制形式打開7.1.2遍歷文件對(duì)象open()函數(shù)打開文本文件會(huì)返回一個(gè)可遍歷對(duì)象,可以用循環(huán)以遍歷的方式訪問(wèn)文件中的數(shù)據(jù),每個(gè)循環(huán)獲得文件中的一行數(shù)據(jù),行末會(huì)有一個(gè)換行符'\n'。7.1讀取文件實(shí)例說(shuō)明:有一個(gè)utf-8編碼的文本文件“靜夜思.txt”,內(nèi)容如下:靜夜思床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉(xiāng)。編程讀取文件的內(nèi)容。思路:先用open()函數(shù)打開文件,只讀取文件,不修改文件內(nèi)容文件內(nèi)容可用循環(huán)逐行輸出實(shí)例7.1讀取文件實(shí)例f=

open('靜夜思.txt',

'r',

encoding='utf-8')

#以只讀模式打開文件,文件對(duì)象命名為f用open()函數(shù)打開文件,讀取模式參數(shù)mode的值可設(shè)為'r'或缺省。encoding='utf-8'參數(shù)表示以"utf-8"編碼方式處理數(shù)據(jù)文件打開后得到的是一個(gè)文件對(duì)象,不能試圖用print(f)輸出文件內(nèi)容,這個(gè)操作只能返回文件對(duì)象的信息:<_io.TextIOWrappername='靜夜思.txt'mode='r'encoding='utf-8'>7.1讀取文件實(shí)例f

=

open('靜夜思.txt',

'r',

encoding='utf-8')

#讀模式打開文件for

line

in

f:

#對(duì)文件對(duì)象進(jìn)行逐行遍歷

print(line.strip())

#函數(shù)去掉行末的換行符,消除空行f.close()

#關(guān)閉文件對(duì)象文件的每一行被當(dāng)作一個(gè)字符串,每個(gè)行末有一個(gè)換行符“\n”,所以返回的第一行應(yīng)該為:“靜夜思\n”在用print()函數(shù)輸出時(shí),字符串末尾的換行符“\n”會(huì)被解析為一個(gè)換行,導(dǎo)致輸出的每一行數(shù)據(jù)后有一個(gè)空行存在可以用strip()方法去掉行末的換行符,使輸出時(shí)不再有額外的空行。7.1讀取文件實(shí)例def

open_file(file):

#打開文件,讀取并輸出其內(nèi)容

f

=

open(file,

'r',

encoding='utf-8')

for

line

in

f:

#對(duì)文件對(duì)象進(jìn)行逐行遍歷

print(line.strip())

#line.strip()函數(shù)去掉行末的換行符

f.close()

#關(guān)閉文件對(duì)象

if

__name__

==

'__main__':

filename

=

'靜夜思.txt'

#文件名定義變量,方便修改

open_file(filename)

#調(diào)用函數(shù)讀取并輸出文件內(nèi)容建議將讀文件的代碼定義為函數(shù),以方便修改和維護(hù)代碼:輸出:靜夜思床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉(xiāng)。7.1.3文件的關(guān)閉打開的文件使用完畢,必須關(guān)閉文件對(duì)象以確保對(duì)文件中數(shù)據(jù)的所有改變都寫回到文件中,同時(shí)釋放文件的讀寫權(quán)限,使其他程序可以操作該文件??梢允褂梦募?duì)象的close()方法關(guān)閉文件:f.close()7.1.3文件的關(guān)閉f.close()f.close()方法被執(zhí)行時(shí),會(huì)先將文件緩沖區(qū)中的數(shù)據(jù)寫入文件,再關(guān)閉已打開的文件對(duì)象f。使用f.close屬性可以查看文件對(duì)象是否是關(guān)閉狀態(tài),如果文件對(duì)象f已關(guān)閉,f.close的值為True,否則為False。每次使用文件對(duì)象f完成文件的讀寫工作后,應(yīng)馬上使用f.close()將文件對(duì)象關(guān)閉,確保文件操作的完成,同時(shí)釋放文件中數(shù)據(jù)占據(jù)的內(nèi)存。7.1.3文件的關(guān)閉但在使用過(guò)程,可能因?yàn)橥涥P(guān)閉文件或程序在執(zhí)行f.close()語(yǔ)句之前遇到錯(cuò)誤,從而導(dǎo)致文件不能正常關(guān)閉。為了避免此類問(wèn)題,在讀寫文件時(shí)可以應(yīng)用異常處理技術(shù),當(dāng)捕獲到代碼異常結(jié)束或文件未關(guān)閉時(shí),執(zhí)行f.close()關(guān)閉文件。finally

中的語(yǔ)句不管是否觸發(fā)異常,都會(huì)被執(zhí)行到,所以經(jīng)常把關(guān)閉文件、清理資源之類的操作放在finally語(yǔ)句下,以確保無(wú)論程序遇到什么問(wèn)題都會(huì)執(zhí)行關(guān)閉文件對(duì)象的語(yǔ)句,使文件正常關(guān)閉。f.close()7.1.3文件的關(guān)閉上下文管理器由關(guān)鍵字“with”和“as”聯(lián)合啟動(dòng),將文件打開操作置于內(nèi)容管理器中。一旦離開隸屬“with…as”的縮進(jìn)代碼范圍,文件對(duì)象的關(guān)閉操作會(huì)自動(dòng)執(zhí)行,不需要再用close()語(yǔ)句顯式的關(guān)閉文件。即使上下文管理器范圍內(nèi)的代碼因錯(cuò)誤異常退出,文件對(duì)象的關(guān)閉操作也會(huì)正常執(zhí)行。withopen(file,mode='r',encoding=None)asfr:#fr是用戶為文件對(duì)象所命名字

pass#在縮進(jìn)區(qū)域?qū)憣?duì)文件對(duì)象進(jìn)行操作的語(yǔ)句7.1讀取文件實(shí)例def

open_file(file):

#打開文件,讀取并輸出其內(nèi)容

with

open(file,

'r',

encoding='utf-8')

as

f:

for

line

in

f:

#對(duì)文件進(jìn)行逐行遍歷

print(line.strip())

#執(zhí)行完此語(yǔ)句,離開縮進(jìn)塊,自動(dòng)關(guān)閉文件if

__name__

==

'__main__':

filename

=

'靜夜思.txt'

open_file(filename)

#調(diào)用open_file()函數(shù)讀取并輸出文件內(nèi)容將實(shí)例7.1的代碼改寫為使用上下文管理器實(shí)現(xiàn),代碼如下:文件的讀寫操作7.1.4文本文件和二進(jìn)制文件的讀寫基本相同,其區(qū)別是文本文件的讀寫按照字符串方式,二進(jìn)制文件的讀寫按照字節(jié)流的方式。為便于理解,本節(jié)以文本文件為例。文件對(duì)象提供了三個(gè)讀取數(shù)據(jù)的方法:read()、readline()和readlines()。每種方法可以接受一個(gè)參數(shù)以限制每次讀取的數(shù)據(jù)量。文件的讀寫操作7.1.4文件讀取方法方法描述read(size)無(wú)參數(shù)或參數(shù)為-1時(shí),讀取全部文件內(nèi)容;當(dāng)參數(shù)size為大于或等于0的整數(shù)時(shí),讀取size個(gè)字符。readline(size)無(wú)參數(shù)或參數(shù)為-1時(shí),讀取并返回文件對(duì)象中的一行數(shù)據(jù),包括行末結(jié)尾標(biāo)記'\n',字符串類型。當(dāng)參數(shù)size為大于或等于0的整數(shù)時(shí),最多返回當(dāng)前行的前size個(gè)字符。readlines(hint)無(wú)參數(shù)時(shí),讀取文件全部數(shù)據(jù),返回一個(gè)列表,列表中每個(gè)元素是文件對(duì)象中的一行數(shù)據(jù),包括行末的換行符'\n'。當(dāng)參數(shù)hint為大于或等于0的整數(shù)時(shí),讀取hint個(gè)字符所在的行。write(b)將給定的字符串或字節(jié)流對(duì)象寫入文件writelines(lines)將一個(gè)元素為字符串的列表寫入文件seek(offset,whence)改變當(dāng)前文件操作指針的位置,offset為指針偏移量,whence代表參照物,有三個(gè)取值:0文件開始、1當(dāng)前位置、2文件結(jié)尾tell()返回文件指針當(dāng)前的位置文件的讀寫操作7.1.4read(size=-1)從文本文件中讀取并返回最多size個(gè)字符,返回的數(shù)據(jù)類型為字符串。當(dāng)size未指定或值為-1時(shí),從當(dāng)前位置一直讀取到文件結(jié)束(EndOfFile,EOF),即讀取從文件指針當(dāng)前所以位置后面的全部剩余字符。如果文件大于可用內(nèi)存,可以反復(fù)調(diào)用read(size)方法讀取。文本文件中每行末尾的換行符和文中的標(biāo)點(diǎn)符號(hào)都會(huì)各占一個(gè)字節(jié)存儲(chǔ),需要計(jì)算在size內(nèi)。with

open('靜夜思.txt',

'r',

encoding

=

'utf-8')

asf:

txt

=

f.read(10)

#讀前10個(gè)字符,輸出:'靜夜思\n床前明月光,'

print(txt)

#輸出read(10)讀到的字符

txt

=

f.read()

#一次讀取文件中的全部剩余數(shù)據(jù)

print(txt)

#'疑是地上霜。\n舉頭望明月,低頭思故鄉(xiāng)。\n'文件的讀寫操作7.1.4readline(size=-1)每次只讀取一行數(shù)據(jù),文件指針移動(dòng)到下一行開始。當(dāng)指針已經(jīng)處于文件末尾時(shí),返回一個(gè)空字符串。如果指定了size,將在當(dāng)前行讀取最多size個(gè)字符,本行剩余字符少于size時(shí),讀取到本行結(jié)束。readline()方法通常比readlines()速度慢,僅當(dāng)沒有足夠內(nèi)存可以一次讀取整個(gè)文件時(shí),才使用readline()方法。with

open('靜夜思.txt',

'r',

encoding

=

'utf-8')

as

f:

txt

=

f.read(14)

#讀14字符,'靜夜思\n床前明月光,疑是地上'

print(txt)

print(f.readline(6))

#本行不足6個(gè)字符,只讀到行末,'霜。\n'

print(f.readline())

#讀取一行,'舉頭望明月,低頭思故鄉(xiāng)。\n'文件的讀寫操作7.1.4readlines(hint=-1)一次讀取文件中所有數(shù)據(jù)行,文件指針一次性就移動(dòng)到文件結(jié)尾處。readlines()方法自動(dòng)將文件內(nèi)容轉(zhuǎn)成一個(gè)列表,列表中每個(gè)元素是文件對(duì)象中的一行數(shù)據(jù),該列表可以由for...in...結(jié)構(gòu)進(jìn)行處理。指定hint參數(shù)值來(lái)讀取的直到指定字符所在的行。with

open('靜夜思.txt',

'r',

encoding

=

'utf-8')

as

f:

txt

=

f.readlines()

#讀取指針之后的所有行

print(txt)

#['床前明月光,疑是地上霜。\n','舉頭望明月,低頭思故鄉(xiāng)。\n']

f.seek(0)

#移動(dòng)指針到文件起始位置

txt

=

f.readlines(6)

#從當(dāng)前位置讀取到第6個(gè)字符所在行結(jié)束

print(txt)

#['靜夜思\n','床前明月光,疑是地上霜。\n']文件的讀寫操作7.1.4write(b)將參數(shù)中的字符串等類字節(jié)對(duì)象寫入文件中,并返回所寫入的字節(jié)數(shù)。with

open('靜夜思.txt',

'w',

encoding

=

'utf-8')

as

f:

f.write('靜夜思\n床前明月光,疑是地上霜。\n')

#將字符串參數(shù)寫入文件

txt

=

f.write('舉頭望明月,低頭思故鄉(xiāng)。\n')

#字符串參數(shù)寫入文件,返回寫入字符數(shù)

print(txt)

#寫入的字符數(shù)為13個(gè)文件的讀寫操作7.1.4writelines(lines,/)將以字符串為元素的列表寫入文件writelines()方法不會(huì)自動(dòng)在每一個(gè)元素后面增加換行,只是將列表內(nèi)容直接輸出,所以在構(gòu)造列表時(shí),在需要換行的位置加入一個(gè)'\n',以控制寫入格式。程序運(yùn)行過(guò)程中寫入到字符串和列表中的內(nèi)容只在程序設(shè)計(jì)過(guò)程中存在于內(nèi)存之中,程序結(jié)束或關(guān)機(jī)后將會(huì)丟失,可以使用write()和writelines()方法可以將字符串和字符串列表中的內(nèi)容寫入到文件中永久保存。with

open('靜夜思.txt',

'w',

encoding

=

'utf-8')

as

f:

f.writelines(['床前明月光,疑是地上霜。\n',

'舉頭望明月,低頭思故鄉(xiāng)。\n'])

7.1.4文件的讀寫操作進(jìn)行文件的寫入操作,使用open()函數(shù)時(shí),要將mode參數(shù)設(shè)置為'w'、'x'、'a'等具有寫權(quán)限的模式。使用“w”模式時(shí),以寫數(shù)據(jù)模式打開文件,若文件不存在,先創(chuàng)建文件后再打開。若該文件已存在,先清除該文件中所有內(nèi)容再寫入新數(shù)據(jù)。使用“a”模式以追加寫數(shù)據(jù)模式打開文件,若文件不存在,先創(chuàng)建文件后再打開。若該文件已存在,新數(shù)據(jù)追加在現(xiàn)有數(shù)據(jù)之后,新寫入的數(shù)據(jù)會(huì)增加到原文件的末尾。使用“x”模式以創(chuàng)建文件寫數(shù)據(jù)模式打開文件,該文件已存在,打開失敗?;蛴谩皉+”為讀模式打開的文件增加寫權(quán)限,但要注意,使用“r+”模式時(shí)文件處于改寫狀態(tài),新寫入的數(shù)據(jù)會(huì)覆蓋原文件起始位置相同字符數(shù)量的數(shù)據(jù)。

fr=open(file,mode='r',encoding=None)文件的讀寫操作7.1.4在編程時(shí),可以將不同模式的讀寫操作定義為不同函數(shù),將文件名和讀寫的數(shù)據(jù)作為傳入?yún)?shù),分別完成不同的讀寫操作,使程序結(jié)構(gòu)清晰,維護(hù)方便。每個(gè)讀寫操作都是獨(dú)立的,函數(shù)調(diào)用結(jié)束后就馬上關(guān)閉文件,釋放對(duì)文件的控制,可以提高程序的性能和安全性。def

write_file(s,

filename):

with

open(filename,

'a',

encoding='utf-8')

as

f:

f.write(s)

#將字符串s寫入文件,附加到后面def

write_lines_file(ls,

filename):

with

open(filename,

'a',

encoding='utf-8')

as

f:

f.writelines(ls)

#將字符串列表ls寫入文件,附加到后面(接下頁(yè))文件的讀寫操作7.1.4(續(xù)上頁(yè))def

read_file(filename):

with

open(filename,

'r',

encoding='utf-8')

as

f:

return

f.read()

#返回字符串形式的文件內(nèi)容

if

__name__

==

'__main__':

file

=

'靜夜思.txt'

#定義文件名變量,方便程序擴(kuò)展和修改

strPoem

=

'

獨(dú)坐敬亭山\n眾鳥高飛盡,孤云獨(dú)去閑。\n相看兩不厭,只有敬亭山。\n'

listPoem

=

['

江雪\n',

'千山鳥飛絕,萬(wàn)徑人蹤滅。\n','孤舟蓑笠翁,獨(dú)釣寒江雪。\n']

write_file(strPoem,

file)

#調(diào)用函數(shù)將字符串s寫入文件

write_lines_file(listPoem,

file)

#調(diào)用函數(shù)將列表寫入文件

print(read_file(file))

#讀文件并輸出文件中的數(shù)據(jù)文件的讀寫操作7.1.4seek()

方法Python在文件讀取過(guò)程中使用了指針在文件剛打開時(shí),指針是指向文件內(nèi)容的起始處,伴隨著讀寫的進(jìn)行指針一步一步往后移動(dòng)。下一次讀寫從指針當(dāng)前位置向后進(jìn)行,當(dāng)指針移動(dòng)到文件結(jié)尾后,其后已經(jīng)沒有數(shù)據(jù),再試圖讀取數(shù)據(jù)就沒有返回值了。如果期望重新讀取文件中的數(shù)據(jù),可使用seek()將文件讀取指針移動(dòng)到期望的位置。seek(offset,whence=SEEK_SET)文件的讀寫操作7.1.4seek(offset,whence=SEEK_SET)offset代表文件指針的偏移量,單位是字節(jié),whence代表參照物,有三個(gè)取值。whence=SEEK_SET或0表示文件開始(缺省值,文本和二進(jìn)制文件都可用),偏移量可以為0或正值。whence=SEEK_CUR或1表示當(dāng)前位置,whence=SEEK_END或2表示文件結(jié)尾。偏移量可以為負(fù)值,負(fù)值僅適用于二進(jìn)制文件。當(dāng)whence=1或whence=2時(shí),在二進(jìn)制文件中可以設(shè)定任意偏移量,在文本文件中,只允許設(shè)置偏移量為0,不允許使用其他數(shù)字作為偏移量。文件的讀寫操作7.1.4在對(duì)文本文檔使用seek()方法時(shí),一般使用seek(0)將文件指針移動(dòng)到文件開始位置。當(dāng)文件是中文、韓文等非西文字符時(shí),一個(gè)字符可能占2個(gè)字節(jié)、3個(gè)字節(jié)甚至最多6個(gè)字節(jié),使指針很難精確移動(dòng)到一個(gè)字的起始位置,導(dǎo)致解碼失敗。所以非西文文件盡量不使用偏移量去定位指針位置。with

open('靜夜思.txt',

'r',

encoding

=

'utf-8')

as

f:

txt

=

f.readlines()

#讀取所有行到列表中

print(txt)

#['床前明月光,疑是地上霜。\n','舉頭望明月,低頭思故鄉(xiāng)。\n']

f.seek(0)

#移動(dòng)指針到文件起始位置

txt

=

f.readlines(6)

#從當(dāng)前位置讀取到第6個(gè)字符所在行結(jié)束

print(txt)

#['靜夜思\n','床前明月光,疑是地上霜。\n']文件的讀寫操作7.1.4tell()

方法返回當(dāng)前指針的位置。用open()方法打開文件后,生成的文件對(duì)象支持用for...in結(jié)構(gòu)進(jìn)行遍歷,不需要將文件中的數(shù)據(jù)一次性讀到內(nèi)存中,可以讀一行處理一行。當(dāng)數(shù)據(jù)文件非常大時(shí),用直接遍歷文件對(duì)象的方法,既可以避免內(nèi)存不足的問(wèn)題。7.2二十大報(bào)告詞頻統(tǒng)計(jì)實(shí)例說(shuō)明:統(tǒng)計(jì)二十大報(bào)告中的詞頻,輸出出現(xiàn)頻次最高的10個(gè)詞及其出現(xiàn)的次數(shù)。由于中文句子中的文字是連在一起的,沒有顯式的標(biāo)記可以把詞切分開,所以中文詞頻的統(tǒng)計(jì)的難點(diǎn)在于把句子切分為詞。分詞就是將連續(xù)的字序列按照一定的規(guī)范重新組合成語(yǔ)義獨(dú)立詞序列的過(guò)程。jieba分詞是一個(gè)專用于分詞的開源Python項(xiàng)目,它在分詞準(zhǔn)確度和速度方面均表現(xiàn)不錯(cuò)。使用前需要先通過(guò)pipinstalljieba安裝這個(gè)庫(kù),再通過(guò)importjieba導(dǎo)入。jieba庫(kù)中應(yīng)用最多的函數(shù)是cut()與lcut(),二者最主要的區(qū)別就是前者返回生成器對(duì)象,需要用遍歷方法讀取或轉(zhuǎn)列表查看,后者直接返回列表對(duì)象。實(shí)例7.2二十大報(bào)告詞頻統(tǒng)計(jì)實(shí)例說(shuō)明:最常用的jieba.lcut()方法支持4種分詞模式:精確模式,把句子最精確地切開,適合文本分析。全模式,通過(guò)設(shè)置參數(shù)cut_all=True,把句子中所有的可能組成詞的詞語(yǔ)都掃描出來(lái),速度非???,但是不能解決歧義。搜索引擎模式,在精確模式的基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分,提高召回率,適合用于搜索引擎分詞。paddle模式,利用PaddlePaddle深度學(xué)習(xí)框架,訓(xùn)練序列標(biāo)注(雙向GRU)網(wǎng)絡(luò)模型實(shí)現(xiàn)分詞。同時(shí)支持詞性標(biāo)注。Paddle模式使用需安裝paddlepaddle-tiny庫(kù)。實(shí)例7.2二十大報(bào)告詞頻統(tǒng)計(jì)實(shí)例import

jieba

txt

=

'實(shí)現(xiàn)中華民族偉大復(fù)興,就是中華民族近代以來(lái)最偉大的夢(mèng)想'

print('精確模式:',jieba.lcut(txt))

print('全模式:',jieba.lcut(txt,

cut_all=True))

print('搜索引擎模式:',jieba.lcut_for_search(txt))精確模式:

['實(shí)現(xiàn)','中華民族','偉大','復(fù)興',',','就是','中華民族','近代','以來(lái)','最','偉大','的','夢(mèng)想']全模式:['實(shí)現(xiàn)','中華','中華民族','民族','偉大','復(fù)興',',','就是','中華','中華民族','民族','近代','以來(lái)','最','偉大','的','夢(mèng)想']搜索引擎模式:['實(shí)現(xiàn)','中華','民族','中華民族','偉大','復(fù)興',',','就是','中華','民族','中華民族','近代','以來(lái)','最','偉大','的','夢(mèng)想']7.2二十大報(bào)告詞頻統(tǒng)計(jì)實(shí)例下面用精確模式分詞,再用字典作為存儲(chǔ),統(tǒng)計(jì)二十大報(bào)告中的高頻詞。import

jieba

def

read_file(file):

"""讀取文件內(nèi)容,返回字符串"""

with

open(file,

'r',

encoding='utf-8')

as

file:

return

file.read()

#讀取文件內(nèi)容為字符串

def

cut_words(text):

"""使用jieba分詞,返回詞的列表"""

return

jieba.lcut(text)

#使用jieba精確模式分詞,返回詞的列表(接下頁(yè))7.2二十大報(bào)告詞頻統(tǒng)計(jì)實(shí)例def

count_word_frequency(words_lst):

"""接收詞的列表為參數(shù),統(tǒng)計(jì)詞頻,按詞頻降序排列"""

word_frequency

=

{}

#創(chuàng)建用于存放詞頻的空字典

for

word

in

words_lst:

#遍歷詞的列表

if

len(word)>1:

#只統(tǒng)計(jì)長(zhǎng)度大于1的詞

word_frequency[word]

=

word_frequency.get(word,

0)

+

1

return

sorted(word_frequency.items(),

key=lambda

x:

x[1],

reverse=True)

if

__name__

==

'__main__':

text

=

read_file('二十大報(bào)告.txt')

#讀取文件內(nèi)容

words_ls

=

cut_words(text)

#分詞

word_freq_ls

=

count_word_frequency(words_ls)

#統(tǒng)計(jì)詞頻

for

top_word,

freq

in

word_freq_ls[:10]:

#取前10個(gè)高頻詞

print(f'{top_word}:{freq}')

#輸出結(jié)果輸出:發(fā)展:218堅(jiān)持:170建設(shè):151人民:134中國(guó):124社會(huì)主義:116國(guó)家:110體系:109推進(jìn):107全面:1027.2CSV格式文件7.2CSV格式文件CSV(Comma-SeparatedValues,CSV)文件又稱為逗號(hào)分隔值,以純文本形式存儲(chǔ)表格數(shù)據(jù)。由任意數(shù)目的記錄組成,記錄間以逗號(hào)或某種換行符分隔。每條記錄由字段組成,字段間的分隔符是其他字符或字符串,最常見的是逗號(hào)或制表符。一般要求每條記錄都有同樣的字段序列,文件開頭不留空行。如果包含列名,則位于文件第一行。每行數(shù)據(jù)不跨行,無(wú)空行。以半角逗號(hào)作分隔符,列為空也要用空字符串表示其存在。字段內(nèi)容如存在半角單引號(hào)('),用半角雙引號(hào)("")將該字段值包含起來(lái)。文件讀寫時(shí)引號(hào),逗號(hào)操作規(guī)則互逆。內(nèi)碼可為ASCII、Unicode或者其他字符。7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例說(shuō)明:有一個(gè)存儲(chǔ)學(xué)生課程成績(jī)的文件“score.csv”,存有6名同學(xué)各4門課的成績(jī)。姓名,C,Java,Python,C#羅明,95,96,85,63朱佳,75,93,66,85李思,86,76,96,93請(qǐng)讀取并顯示文件內(nèi)容,計(jì)算每位同學(xué)的總分附加到課程成績(jī)后面,根據(jù)每名同學(xué)的總分進(jìn)行降序排序,并將排序后的結(jié)果寫入到新文件“scoreSort.csv”中。實(shí)例7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例請(qǐng)讀取文件中的數(shù)據(jù),每行數(shù)據(jù)根據(jù)逗號(hào)切分為列表,輸出二維列表。打開文件后對(duì)文件進(jìn)行遍歷,讀取每行的內(nèi)容為一個(gè)用逗號(hào)分隔的字符串,格式為:'羅明,95,96,85,63\n'用split(',')函數(shù)根據(jù)逗號(hào)切分字符串可產(chǎn)生一個(gè)形如:['羅明','95','96','85','63']的列表,將這個(gè)列表作為一個(gè)元素加到列表score_ls中,構(gòu)成一個(gè)嵌套列表。7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例def

read_file(filename):

"""讀取文件中的數(shù)據(jù),逐行切分為子列表,返回嵌套列表"""

with

open(filename,

'r',

encoding='utf-8')

as

fr:

score_ls

=

[]

#創(chuàng)建空列表

for

line

in

fr:

#line為文件中一行

score_ls.append(line.strip().split(','))

#切分為列表附加到ls

return

score_ls

#返回成績(jī)列表請(qǐng)讀取文件中的數(shù)據(jù),每行數(shù)據(jù)根據(jù)逗號(hào)切分為列表,輸出二維列表。7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例輸出:[['姓名',

'C',

'Java',

'Python',

'C#'],

['羅明',

'95',

'96',

'85',

'63'],

['朱佳',

'75',

'93',

'66',

'85'],

['李思',

'86',

'76',

'96',

'93'],

['鄭君',

'88',

'98',

'76',

'90'],

['王雪',

'99',

'96',

'91',

'88'],

['李立',

'82',

'66',

'100',

'77']]這個(gè)操作是將整個(gè)文件作為一個(gè)嵌套列表,其中每個(gè)元素都是子列表。這樣,對(duì)文件中數(shù)據(jù)的操作就變成了對(duì)這個(gè)列表的操作,可以通過(guò)索引和切片的方式對(duì)其進(jìn)行訪問(wèn)和處理。7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例計(jì)算每位同學(xué)的總分附加到列表中各門課程成績(jī)后面為每位同學(xué)增加總成績(jī),可以將列表序號(hào)為0的元素去掉對(duì)列表剩余部分進(jìn)行遍歷,每次得到一位同學(xué)的成績(jī)的列表lst,切片

lst[1:]為各門課的成績(jī)使用map()

函數(shù)將每個(gè)元素都映射為整數(shù),再用sum()函數(shù)對(duì)其進(jìn)行求和。7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例def

total(score_ls):

#計(jì)算總分,score_ls為讀文件獲得的列表

total_score

=

[]

#創(chuàng)建空列表

score_ls[0].append('總分')

#先為標(biāo)題行末尾增加一個(gè)元素'總分'

for

lst

in

score_ls

[1:]:

#遍歷非標(biāo)題行

#對(duì)成績(jī)部分匯總,轉(zhuǎn)為元素為字符串的列表后拼接到子列表lst上

total_score.append(lst

+

[str(sum(map(int,

lst[1:])))])

return

[score_ls

[0]]

+

total_score

#返回列表計(jì)算每位同學(xué)的總分附加到列表中各門課程成績(jī)后面7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例根據(jù)每名同學(xué)的總分進(jìn)行降序排序輸出用sorted()

對(duì)二維列表數(shù)據(jù)中的成績(jī)進(jìn)行排序,略過(guò)標(biāo)題行,數(shù)據(jù)排序關(guān)鍵字用匿名函數(shù),排序依據(jù)中列表最后一個(gè)元素(序號(hào)為-1),降序排序。將排序后的新列表與標(biāo)題行列表再拼接到一起輸出。7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例def

sort_list(score_total,

n):

#根據(jù)第n項(xiàng)對(duì)嵌套列表降序排序

title_ls

=

[score_total[0]]

#標(biāo)題不參與排序

score_ls

=

score_total[1:]

#將成績(jī)數(shù)據(jù)切分出來(lái)

score_ls.sort(key

=

lambda

x:int(x[n]),

reverse=True)

#轉(zhuǎn)整數(shù)作排序依據(jù),降序

score_sort

=

title_ls

+

score_ls

#與標(biāo)題數(shù)據(jù)拼接

return

score_sort

#返回排序后的列表根據(jù)總分排序的關(guān)鍵語(yǔ)句是:考慮到標(biāo)題行不能參與排序,需先切片將其去除,對(duì)剩余部分進(jìn)行排序??梢远x為函數(shù),將排序依據(jù)序號(hào)作為參數(shù),使程序易于修改和重用。score_ls.sort(key

=

lambda

x:int(x[n]),

reverse=True)

#

n為總分序號(hào),總分轉(zhuǎn)整數(shù)降序7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例將排序后的結(jié)果寫入到新文件“score_total.csv”中在將處理好的數(shù)據(jù)寫回文件時(shí),要注意創(chuàng)建文件對(duì)象模式要有寫權(quán)限,用write()寫回?cái)?shù)據(jù)時(shí),原CSV文件中的分隔符(逗號(hào))需要重新加進(jìn)去。用join()函數(shù),括號(hào)中以序列為參數(shù),指定用半角逗號(hào)“,”作為連接符,將序列中的各元素用逗號(hào)連接起來(lái)。行末的換行符也需要重新加入,以免所有數(shù)據(jù)寫到一行中,換行符的添加可用字符串連接的方式,用“+”將“\n”與列表中的元素連接起來(lái)。7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例def

write_file(score_sort,

new_file):

#將列表寫入新文件

with

open(new_file,

'w',

encoding='utf-8')

as

fw:

#'w'寫權(quán)限

for

x

in

score_sort:

#遍歷列表,x為子列表

fw.write(','.join(x)

+

'\n')

#拼接為字符串加\n

print('文件寫入完成')

#輸出提示將排序后的結(jié)果寫入到新文件“score_total.csv”中7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例def

read_file(filename):

with

open(filename,

'r',

encoding='utf-8')

as

fr:

return

[line.strip().split(',')

for

line

in

fr]

#返回嵌套列表

def

write_file(score_sort,

new_file):

#列表寫入文件

with

open(new_file,

'w',

encoding='utf-8')

as

fw:

#'w'寫權(quán)限

[fw.write(','.join(x)

+

'\n')

for

x

in

score_sort]讀寫文件函數(shù)也可以應(yīng)用列表推導(dǎo)式實(shí)現(xiàn):7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例代碼優(yōu)化將不同處理用獨(dú)立函數(shù)實(shí)現(xiàn),每段代碼都只實(shí)現(xiàn)一個(gè)功能,容易實(shí)現(xiàn)和調(diào)試,避免讀寫模式設(shè)置錯(cuò)誤或指針位置錯(cuò)誤導(dǎo)致出錯(cuò)的問(wèn)題。列表是可變數(shù)據(jù)類型,在函數(shù)中可以用列表的append()

方法直接對(duì)列表進(jìn)行修改,可減少函數(shù)參數(shù)與返回值的使用。def

read_file(filename):

"""讀取文件中的數(shù)據(jù),逐行切分為子列表,返回嵌套列表"""

with

open(filename,

'r',

encoding='utf-8')

as

fr:

score_ls

=

[line.strip().split(',')

for

line

in

fr]

#用推導(dǎo)式生成嵌套列表

return

score_ls

#返回成績(jī)列表7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例def

total(score_ls):

#計(jì)算總分,score_ls為讀文件獲得的列表

total_score

=

[]

#創(chuàng)建空列表

score_ls

[0].append('總分')

#先為標(biāo)題行末尾增加一個(gè)元素'總分'

for

lst

in

score_ls

[1:]:

#遍歷非標(biāo)題行

#對(duì)成績(jī)部分匯總,轉(zhuǎn)為元素為字符串的列表后拼接到子列表lst上

total_score.append(lst

+

[str(sum(map(int,

lst[1:])))])

return

[score_ls

[0]]

+

total_score

#返回列表

def

sort_list(score_total,

n):

#根據(jù)第n項(xiàng)對(duì)嵌套列表降序排序

title_ls

=

[score_total[0]]

#標(biāo)題不參與排序

score_ls

=

score_total[1:]

#將成績(jī)數(shù)據(jù)切分出來(lái)

score_ls.sort(key

=

lambda

x:int(x[n]),

reverse=True)

#轉(zhuǎn)整數(shù)作排序依據(jù),降序

score_sort

=

title_ls

+

score_ls

#與標(biāo)題數(shù)據(jù)拼接

return

score_sort

#返回排序后的列表7.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例def

write_file(score_sort,

new_file):

#將列表寫入新文件

with

open(new_file,

'w',

encoding='utf-8')

as

fw:

#'w'寫權(quán)限

for

x

in

score_sort:

#遍歷成績(jī)列表

fw.write(','.join(x)

+

'\n')

#拼接為字符串加\n

print('文件寫入完成')

#輸出提示

if

__name__

==

'__main__':

file

=

'score.csv'

#定義文件名變量

score

=

read_file(file)

#獲得成績(jī)列表

score_total

=

total(score)

#增加總成績(jī)

print(score_total)

#輸出列表數(shù)據(jù)

score_sorted

=

sort_list(score_total,

5)

#根據(jù)總分(整數(shù))進(jìn)行排序

write_file(score_sorted,

'score_sorted.csv')

#將按總分排序?qū)懭氲叫挛募?.3讀文件統(tǒng)計(jì)成績(jī)實(shí)例增加總成績(jī)并排序后文件內(nèi)容:姓名,C語(yǔ)言,Java,Python,C#,總分王雪,99,96,91,88,374鄭君,88,98,76,90,352李思,86,76,96,93,351羅明,95,96,85,63,339李立,82,66,100,77,325朱佳,75,93,66,85,3197.3JSON文件7.3JSON文件JSON(JavaScriptObjectNotation)是一種當(dāng)前廣泛應(yīng)用的跨語(yǔ)言通用數(shù)據(jù)交換格式,多用于網(wǎng)絡(luò)數(shù)據(jù)交互及不同的應(yīng)用程序之間的數(shù)據(jù)交互。JSON是文本格式,使用Unicode編碼,默認(rèn)utf-8方式存儲(chǔ)。JSON的key必須用雙引號(hào)引住字符串,不能用單引號(hào)。Python內(nèi)置json

庫(kù)用于對(duì)JSON數(shù)據(jù)的解析和編碼,使用json

庫(kù)的dump()和load()方法,可以將Python格式對(duì)象編碼為json

格式或是將json

格式解碼為Python格式對(duì)象。JSON編碼語(yǔ)法及主要參數(shù)如下:json.dumps(obj,ensure_ascii=True,indent=None,sort_keys=False)json.dump(obj,fp,ensure_ascii=True,indent=None,sort_keys=False)7.3JSON文件默認(rèn)ensure_ascii=True,會(huì)將中文等非ASCII字符轉(zhuǎn)為形如\uXXXX的unicode編碼,設(shè)置ensure_ascii=False可以禁止JSON將中文轉(zhuǎn)為unicode編碼,保持中文原樣輸出。字典數(shù)據(jù)轉(zhuǎn)為JSON默認(rèn)不排序,可設(shè)置sort_keys=True使轉(zhuǎn)換結(jié)果按照字典升序排序。indent

參數(shù)可用來(lái)對(duì)JSON數(shù)據(jù)進(jìn)行格式化輸出,默認(rèn)值為None,不做格式化處理,可設(shè)一個(gè)大于0的整數(shù)表示縮進(jìn)量,例如indent=4。輸出的數(shù)據(jù)被格式化之后,變得可讀性更好。json.dumps(obj,ensure_ascii=True,indent=None,sort_keys=False)json.dump(obj,fp,ensure_ascii=True,indent=None,sort_keys=False)7.3JSON文件dump()函數(shù)除了將參數(shù)轉(zhuǎn)換為JSON格式的字符串,還會(huì)將字符串寫入到文件對(duì)象

fp中,編碼方法如下表所示。方法描述json.dumps(obj)

將Python格式對(duì)象

obj編碼成JSON格式,寫入內(nèi)存json.dump(obj,fp)

將Python格式對(duì)象

obj編碼成JSON格式,寫入到磁盤文件對(duì)象

fp中7.3JSON文件JSON的解碼過(guò)程是將一個(gè)包含JSON格式數(shù)據(jù)的可讀文件反序列化為一個(gè)Python格式對(duì)象。Python的原始類型與JSON類型會(huì)相互轉(zhuǎn)換,主要使用json.loads(s)和json.load(fp)兩個(gè)方法。方法描述json.loads(s)

將字符串

s

中的

JSON數(shù)據(jù)解碼為Python數(shù)據(jù)類型

其他格式數(shù)據(jù)會(huì)轉(zhuǎn)為

unicode格式j(luò)son.load(fp)

將磁盤文件對(duì)象

fp中的

JSON數(shù)據(jù)解碼為Python數(shù)據(jù)類型

其他格式數(shù)據(jù)會(huì)轉(zhuǎn)為

unicode格式7.3JSON文件在編碼和解碼過(guò)程中存在Python數(shù)據(jù)類型和JSON數(shù)據(jù)類型的轉(zhuǎn)換過(guò)程具體轉(zhuǎn)換關(guān)系如下:Python→JSONJSON→Pythondictobjectobjectdictlist,tuplearrayarrayliststr,unicodestringstringstrint、floatnumbernumber(int)int

number(real)floatTruetruetrueTrueFalsefalsefalseFalse

nullNone7.3JSON文件將Python中的字典轉(zhuǎn)成JSON格式,設(shè)置ensure_ascii=False可保持非ASCII碼字符原樣輸出:import

json

data

=

{'name':

'李立',

'phonenumber':

,

'city':

'武漢'}

#字典data_json

=

json.dumps(data,ensure_ascii=False)

#字典轉(zhuǎn)JSON,中文原樣輸出print(data_json)

#{"name":"李立","phonenumber":,"city":"武漢"}7.3JSON文件將Python中的字典轉(zhuǎn)成JSON格式設(shè)置sort_keys=True使輸出按升序排序設(shè)置indent=4對(duì)輸出進(jìn)行格式化,使輸出時(shí)每個(gè)數(shù)據(jù)縮進(jìn)4個(gè)字符:import

json

data

=

{'name':

'李立',

'phonenumber':

,

'city':

'武漢'}data_json

=

json.dumps(data,

sort_keys=True,

ensure_ascii=False,

indent=4)

print(data_json)7.3JSON文件輸出樣式如下,注意到數(shù)據(jù)順序與原始字典順序不同,按字典的鍵進(jìn)行升序排序再輸出:{

"city":

"武漢",

"name":

"李立",

"phonenumber":

}7.3JSON文件json.dump(data,f)方法可以將JSON數(shù)據(jù)寫入到一個(gè)具有寫權(quán)限的文件對(duì)象中:import

json

data

=

{'name':

'李立',

'phonenumber':

,

'city':

'武漢'}with

open("test.json",

"w",

encoding='utf-8')

as

f:

#文件對(duì)象f

json.dump(data,

f,

ensure_ascii=False,

indent=4)

#數(shù)據(jù)寫入f7.3JSON文件“test.json”文件中的數(shù)據(jù)存儲(chǔ)如下所示:{

"name":

"李立",

"phonenumber":

"city":

"武漢",}7.3JSON文件相反地操作,便可以將JSON格式數(shù)據(jù)轉(zhuǎn)為Python的數(shù)據(jù)類型。import

json

with

open("test.json",

"r",

encoding='utf-8')

as

f:

dataPython

=

json.load(f)

#將f中的json數(shù)據(jù)解碼為python中字典print(dataPython)

#{'name':'李立','phonenumber':,'city':'武漢'}

#包含JSON格式數(shù)據(jù)的字符串data

=

'{"name":"李立","phonenumber":,"city":"武漢"}'

print(json.loads(data))

#字典{'name':'李立','phonenumber':,'city':'武漢'}7.3JSON文件注意:data是一個(gè)包含有JSON格式的字符串,此處不可以用str(data),這樣處理時(shí),解釋器會(huì)認(rèn)為data中的數(shù)據(jù)是字典,默認(rèn)將其轉(zhuǎn)為字典的可打印字符串'{'name':'李立','phonenumber':,'city':'武漢'}'。此時(shí)的鍵和值都變成了單引號(hào),不再是JSON格式數(shù)據(jù),不可再用loads()函數(shù)進(jìn)一步轉(zhuǎn)換。7.4CSV格式與JSON格式轉(zhuǎn)換實(shí)例說(shuō)明:學(xué)生課程成績(jī)的文件“score.csv”中存有5名同學(xué)各4門課的成績(jī)和總成績(jī)。請(qǐng)將文件內(nèi)容轉(zhuǎn)為JSON格式寫入到新文件“score.json”中。思路:先以讀的模式打開CSV文件創(chuàng)建文件對(duì)象,將文件對(duì)象中的標(biāo)題行數(shù)據(jù)讀取出來(lái),轉(zhuǎn)為列表。再遍歷文件對(duì)象剩余部分,逐行切分為列表,把當(dāng)前數(shù)字列表與標(biāo)題列表用zip()組合,接著用dict()轉(zhuǎn)為字典數(shù)據(jù)類型,得到元素為字典的列表。實(shí)例7.4CSV格式與JSON格式轉(zhuǎn)換def

read_file(filename):

"""讀取文件中的數(shù)據(jù),逐行轉(zhuǎn)為字典,返回元素為字典的列表"""

score_ls

=

[]

#定義空列表存儲(chǔ)成績(jī)

with

open(filename,

'r',

encoding='utf-8')

as

fr:

title

=

fr.readline().strip().split(',')

#讀取標(biāo)題行切分為列表

for

line

in

fr:

#遍歷文件中剩余行

line

=

line.strip().split(',')

#當(dāng)前行切分為列表

score_ls.append(dict(zip(title,

line)))

#生成字典,添加到列表

return

score_ls

#返回元素為字典的列表

if

__name__

==

'__main__':

file

=

'score.csv'

#定義文件名變量

score_lst

=

read_file(file)

#獲得成績(jī)列表

print(score_lst)實(shí)例7.4CSV格式與JSON格式轉(zhuǎn)換實(shí)例查看輸出的文件格式:[

{'姓名':'羅明','C語(yǔ)言':'95','Java':'96','Python':'85','C#':'63'},

{'姓名':'朱佳','C語(yǔ)言':'75','Java':'93','Python':'66','C#':'85'},

{'姓名':'李思','C語(yǔ)言':'86','Java':'76','Python':'96','C#':'93'},

{'姓名':'鄭君','C語(yǔ)言':'88','Java':'98','Python':'76','C#':'90'},

{'姓名':'王雪','C語(yǔ)言':'99','Java':'96','Python':'91','C#':'88'},

{'姓名':'李立','C語(yǔ)言':'82','Java':'66','Python':'100','C#':'77'}]7.4CSV格式與JSON格式轉(zhuǎn)換實(shí)例再以創(chuàng)建寫的模式打開JSON文件對(duì)象,再用dump()函數(shù)將列表中的字典對(duì)象編碼為JSON格式并寫入到文件“score.json”中。import

json

def

write_json(score_ls):

with

open('score.json',

'w',

encoding='utf-8')

as

fw:

json.dump(score_ls,

fw,

inde

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論