版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
任務(wù)7:數(shù)據(jù)的導(dǎo)入導(dǎo)出Python程序設(shè)計(jì)1、任務(wù)描述目錄2、技術(shù)準(zhǔn)備Python程序設(shè)計(jì)3、任務(wù)實(shí)施1、任務(wù)描述本任務(wù)需要完成學(xué)生數(shù)據(jù)的導(dǎo)入導(dǎo)出,將學(xué)生基本信息數(shù)據(jù)保存到文件中,需要時(shí)可直接從文件中讀取數(shù)據(jù)。要完成本任務(wù),需要了解和掌握Python中文件的相關(guān)操作。2.1文件的打開(kāi)與關(guān)閉技術(shù)準(zhǔn)備2.2文本文件的讀寫(xiě)操作Python程序設(shè)計(jì)2.3文件常用方法和屬性2.4上下文管理語(yǔ)句with2.5二進(jìn)制文件操作2.6文件與目錄操作2.7文件使用示例2.1文件的打開(kāi)與關(guān)閉文件是指一組相關(guān)數(shù)據(jù)的有序集合,該數(shù)據(jù)集有一個(gè)名稱(chēng),叫文件名。文件通常是存放在外部介質(zhì)(如硬盤(pán)、U盤(pán)等)上的,使用時(shí)才調(diào)入內(nèi)存中來(lái)。按文件中數(shù)據(jù)的組織形式(也即編碼方式),文件分為文本文件和二進(jìn)制文件兩類(lèi)。2.1文件的打開(kāi)與關(guān)閉1.文本文件文本文件一般由單一特定編碼(如UTF-8編碼)的字符組成,文件中存儲(chǔ)的是常規(guī)字符串,由若干文本行組成,通常每行以換行符“\n”結(jié)尾。常規(guī)字符串是指記事本或其他文本編輯器能正常顯示、編輯并且人類(lèi)能夠直接閱讀和理解的字符串,如英文字母、漢字、數(shù)字字符串。Windows中擴(kuò)展名為txt、csv、log、ini等的文件都屬于文本文件。2.二進(jìn)制文件二進(jìn)制文件直接由比特0和比特1組成,沒(méi)有統(tǒng)一的字符編碼,文件內(nèi)部數(shù)據(jù)的組織格式與文件用途有關(guān),文件內(nèi)容以字節(jié)流形式存儲(chǔ),無(wú)法用記事本或其他普通字處理軟件直接進(jìn)行編輯,通常也無(wú)法被人類(lèi)直接閱讀和理解,需要使用對(duì)應(yīng)的軟件進(jìn)行解碼或反序列化后才能正確地讀取、顯示、修改或執(zhí)行。常見(jiàn)的如圖形圖像文件、音視頻文件、可執(zhí)行文件、資源文件、各種數(shù)據(jù)庫(kù)文件、各類(lèi)office文檔等都屬于二進(jìn)制文件。2.1文件的打開(kāi)與關(guān)閉1.文件的打開(kāi)文件的打開(kāi)使用open()函數(shù),使用格式:open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)功能:以指定的模式打開(kāi)指定文件。該函數(shù)的常用參數(shù)含義如下:(1)參數(shù)file用于指定要打開(kāi)的文件。(2)參數(shù)mode用于指定文件打開(kāi)模式。文件打開(kāi)模式如表71所示。以不同方式打開(kāi)文件時(shí),文件指針的初始位置略有不同。以“只讀”和“只寫(xiě)”模式打開(kāi)時(shí)文件指針的初始位置是文件頭,以“追加”模式打開(kāi)文件時(shí)文件指針的初始位置是文件尾。(3)參數(shù)encoding指定文件的編碼方式,此參數(shù)只對(duì)文本文件有效。(4)參數(shù)newline表示文件中新行的形式,只適用于文本模式,取值可以是None、''、'\n'、'\r'、'\r\n'。2.1文件的打開(kāi)與關(guān)閉文件打開(kāi)模式:模式說(shuō)明r讀模式(默認(rèn)模式,可省略),如果文件不存在則拋出異常w寫(xiě)模式,如果文件已存在,先清空原有內(nèi)容x寫(xiě)模式,創(chuàng)建新文件,如果文件已存在則拋出異常a追加模式,不覆蓋文件中原有內(nèi)容b二進(jìn)制模式(與r\w\x\a模式組合使用)t文本模式(默認(rèn)模式,可省略,與r\w\x\a模式組合使用)+在原功能基礎(chǔ)上增加同時(shí)讀寫(xiě)功能(與r\w\x\a模式組合使用)2.1文件的打開(kāi)與關(guān)閉說(shuō)明:如果執(zhí)行正常,open()函數(shù)返回1個(gè)可迭代的文件對(duì)象,通過(guò)該文件對(duì)象可以對(duì)文件進(jìn)行讀寫(xiě)操作。如果指定文件不存在、訪(fǎng)問(wèn)權(quán)限不夠、磁盤(pán)空間不夠或其他原因?qū)е挛募僮魇t拋出異常。>>>fp=open('a.txt','w')#以只寫(xiě)模式打開(kāi)當(dāng)前路徑下的文件a.txt>>>fp=open('d:/data.dat','wb')#以只寫(xiě)模式打開(kāi)二進(jìn)制文件d:/data.dat>>>fp=open('d:/temp.data','r')#要打開(kāi)的文件不存在,拋出異常Traceback(mostrecentcalllast):File"<pyshell#1>",line1,in<module>fp=open('d:/temp.data','r')FileNotFoundError:[Errno2]Nosuchfileordirectory:'d:/temp.data'2.1文件的打開(kāi)與關(guān)閉2.文件的關(guān)閉格式:文件對(duì)象.close()功能:把緩沖區(qū)的內(nèi)容寫(xiě)入文件,同時(shí)關(guān)閉文件,并釋放文件對(duì)象。說(shuō)明:文件對(duì)象是指用open()函數(shù)打開(kāi)后返回的對(duì)象。2.2文本文件的讀寫(xiě)操作1、文件的寫(xiě)操作(1)write()方法格式:文件對(duì)象.write(s)功能:把字符串s寫(xiě)入文件中。(1)被寫(xiě)入的文件可以采用寫(xiě)、追加方式打開(kāi),用寫(xiě)方式打開(kāi)一個(gè)已經(jīng)存在的文件時(shí)將清除原有的文件內(nèi)容,寫(xiě)入字符從文件首開(kāi)始。如需保留原有文件內(nèi)容,可以追加方式打開(kāi)文件。(2)每寫(xiě)入一個(gè)字符串,文件內(nèi)部位置指針向后移動(dòng)到末尾,指向下一個(gè)待寫(xiě)入的位置。(3)寫(xiě)入內(nèi)容時(shí),系統(tǒng)不會(huì)添加換行符,如需換行,可在字符串s中加入相應(yīng)的換行符。(4)在交互模式下寫(xiě)入成功時(shí)返回本次寫(xiě)入到文件中的字節(jié)數(shù)。2.2文本文件的讀寫(xiě)操作【例7?1】在指定目錄下新建一文本文件test1.txt,往里面寫(xiě)入如下兩行內(nèi)容:Hello,PythonHello,World>>>fp=open('d:/test1.txt','w')#以寫(xiě)方式打開(kāi)文件>>>fp.write('Hello,Python\nHello,world\n')#寫(xiě)入內(nèi)容25#本次成功寫(xiě)入的字節(jié)數(shù)>>>fp.close()#關(guān)閉文件2.2文本文件的讀寫(xiě)操作(2)wirtelines()方法格式:文件對(duì)象.writelines(slist)功能:把字符串列表slist寫(xiě)入文本文件中。說(shuō)明:用write()方法一次只能寫(xiě)入一個(gè)字符串,如果想一次寫(xiě)入多個(gè)字符串,可將這多個(gè)字符串放入一列表中,然后利用writelines()方法寫(xiě)入。同樣該方法也不會(huì)自動(dòng)添加換行符。2.2文本文件的讀寫(xiě)操作【例7?2】在上例所建的文件test1.txt中再添加如下內(nèi)容:Hello,JinanHello,ChinaWelcometolearnPython>>>fp=open('d:/test1.txt','a')>>>slist=['Hello,Jinan\n','Hello,China\n','WelcometolearnPython\n']>>>fp.writelines(slist)>>>fp.close()2.2文本文件的讀寫(xiě)操作2、讀操作(1)read()方法格式:文件對(duì)象.read([size])功能:從文本文件中讀取size個(gè)字符的內(nèi)容,如果省略size則表示讀取所有內(nèi)容,返回結(jié)果為字符串?!纠??3】利用read()方法讀取上例中建立的文件test1.txt中內(nèi)容。>>>fp=open('d:/test1.txt','r')#以只讀方式打開(kāi)文件>>>fp.read(4)#讀4個(gè)字符'Hell'>>>fp.read(2)#讀2個(gè)字符'o,'>>>fp.read()#讀取剩余所有字符'Python\nHello,world\nHello,Jinan\nHello,China\nWelcometolearnPython\n'>>>fp.close()2.2文本文件的讀寫(xiě)操作(2)readline()方法格式:文件對(duì)象.readline()功能:從文本文件中讀取一行內(nèi)容,返回結(jié)果為字符串。【例7?4】利用readline()方法讀取文件test1.txt中內(nèi)容。>>>fp=open('d:/test1.txt','r')#以只讀方式打開(kāi)文件>>>fp.readline()#讀取一行'Hello,Python\n'>>>fp.readline()#讀取一行'Hello,world\n'>>>fp.close()#關(guān)閉文件2.2文本文件的讀寫(xiě)操作(3)readlines()方法格式:文件對(duì)象.readlines()功能:一次讀取整個(gè)文件,將文件內(nèi)容按行存儲(chǔ)為列表,返回結(jié)果為字符串列表。【例7?5】利用readlines()方法讀取文件test1.txt中內(nèi)容。>>>fp=open('d:/test1.txt','r')#以只讀方式打開(kāi)文件>>>fp.readlines()#讀取所有行['Hello,Python\n','Hello,world\n','Hello,Jinan\n','Hello,China\n','WelcometolearnPython\n']>>>fp.close()2.3文件常用方法和屬性1、文件常用方法方法功能說(shuō)明flush()把緩沖區(qū)的內(nèi)容寫(xiě)入文件,但不關(guān)閉文件readable()測(cè)試當(dāng)前文件是否可讀seek(offset[,whence])把文件指針移動(dòng)到新的位置,offset表示相對(duì)于whence的位置。whence為0表示從文件頭開(kāi)始計(jì)算,1表示從當(dāng)前位置開(kāi)始計(jì)算,2表示從文件尾開(kāi)始計(jì)算,默認(rèn)為0seekable()測(cè)試當(dāng)前文件是否支持隨機(jī)訪(fǎng)問(wèn),如果文件不支持隨機(jī)訪(fǎng)問(wèn),則調(diào)用方法seek()、tell()和truncate()時(shí)會(huì)拋出異常tell() 返回文件指針的當(dāng)前位置truncate([size])刪除從當(dāng)前指針位置到文件末尾的內(nèi)容。如果指定了size,則不論指針在什么位置都只留下前size個(gè)字節(jié),其余的一律刪除writable()測(cè)試當(dāng)前文件是否可寫(xiě)2.3文件常用方法和屬性【例7?6】文件指針操作。>>>fp=open('d:/test1.txt','r')>>>fp.tell()#文件剛打開(kāi)時(shí)指針處于文件頭0>>>fp.seek(6)#移動(dòng)指針位置6>>>fp.read(6)#從當(dāng)前指針位置開(kāi)始讀取'Python'>>>fp.tell()#當(dāng)前指針位置12>>>fp.close()#關(guān)閉文件2.3文件常用方法和屬性2、文件屬性屬性說(shuō)明buffer返回當(dāng)前文件的緩沖區(qū)對(duì)象closed判斷文件是否關(guān)閉,若文件已關(guān)閉則返回Truemode返回文件的打開(kāi)模式name返回文件的名稱(chēng)2.3文件常用方法和屬性【例7?7】文件屬性使用。fp=open('d:/test1.txt','r')print('當(dāng)前緩沖區(qū)對(duì)象:',fp.buffer)print('當(dāng)前文件是否關(guān)閉:',fp.closed)print('當(dāng)前文件打開(kāi)模式:',fp.mode)print('當(dāng)前打開(kāi)的文件:',)fp.close()【運(yùn)行結(jié)果】當(dāng)前緩沖區(qū)對(duì)象:<_io.BufferedReadername='d:/test1.txt'>當(dāng)前文件是否關(guān)閉:False當(dāng)前文件打開(kāi)模式:r當(dāng)前打開(kāi)的文件:d:/test1.txt2.4上下文管理語(yǔ)句with在使用文件的過(guò)程中,即使寫(xiě)了關(guān)閉文件的代碼,也無(wú)法保證文件一定能夠正常關(guān)閉。例如,如果在打開(kāi)文件之后和關(guān)閉文件之前發(fā)生了錯(cuò)誤導(dǎo)致程序崩潰,這時(shí)文件就無(wú)法正常關(guān)閉。在管理文件對(duì)象時(shí)推薦使用with關(guān)鍵字,可以有效地避免這個(gè)問(wèn)題。關(guān)鍵字with可自動(dòng)管理資源,不論因?yàn)槭裁丛蛱鰓ith代碼塊,總能保證文件被正確關(guān)閉,可以在代碼塊執(zhí)行完畢后自動(dòng)還原進(jìn)入該代碼塊時(shí)的上下文,常用于文件操作、數(shù)據(jù)庫(kù)連接、網(wǎng)絡(luò)通信連接等場(chǎng)合。用于文件內(nèi)容讀寫(xiě)時(shí),其用法如下:withopen(filename,mode)as文件對(duì)象名:
通過(guò)文件對(duì)象讀寫(xiě)文件的語(yǔ)句2.4上下文管理語(yǔ)句with【例7?8】利用with語(yǔ)句依次讀取文件test1.txt中的內(nèi)容并顯示。withopen('d:/test1.txt','r')asfp:forlineinfp:print(line.strip())2.4上下文管理語(yǔ)句with上下文管理語(yǔ)句with還支持一次打開(kāi)兩個(gè)文件,其使用格式如下:withopen(filename,mode)as文件對(duì)象名,open(filename,mode)as文件對(duì)象名:
文件操作語(yǔ)句塊【例7?9】利用with語(yǔ)句實(shí)現(xiàn)文件的復(fù)制。withopen('d:/test1.txt','r')assrc,open('d:/test1_bak.txt','w')asdst:dst.write(src.read())2.4上下文管理語(yǔ)句with【例710】設(shè)有一文本文件data.txt,里面每一行為一個(gè)整數(shù),將所有數(shù)據(jù)升序排序后寫(xiě)入新文件data_asc.txt中。withopen('d:/data.txt','r')asfp:#以只讀方式打開(kāi)文件data=fp.readlines()#讀出內(nèi)容到列表中
data=[int(line.strip())forlineindata]#將所有元素轉(zhuǎn)換成整型data.sort()#升序排序data=[str(i)+'\n'foriindata]#將整型轉(zhuǎn)換成字符串
withopen('d:/data_asc.txt','w')asfp:#以寫(xiě)方式打開(kāi)文件fp.writelines(data)#寫(xiě)入內(nèi)容
2.4上下文管理語(yǔ)句with【例711】設(shè)有一文件data2.txt,里面包含有若干用逗號(hào)分隔的整數(shù),將其數(shù)據(jù)降序排列后寫(xiě)入文件data2_desc.txt中。withopen('d:/data2.txt','r')asfp:#以讀方式打開(kāi)文件data=fp.read().split(',')#讀出所有內(nèi)容并以逗號(hào)分割
data=list(map(int,data))#將所有元素轉(zhuǎn)換成整型data.sort(reverse=True)#降序排序data=','.join(map(str,data))#將整型轉(zhuǎn)換成字符串
withopen('d:/data2_desc.txt','w')asfp:#以寫(xiě)方式打開(kāi)文件fp.write(data)#寫(xiě)入文件2.5二進(jìn)制文件操作數(shù)據(jù)庫(kù)文件、圖像文件、可執(zhí)行文件、音視頻文件、Office文檔等等均屬于二進(jìn)制文件。對(duì)于二進(jìn)制文件,不能使用記事本或其他文本編輯軟件進(jìn)行正常讀寫(xiě),也無(wú)法通過(guò)Python的文件對(duì)象直接讀取和理解二進(jìn)制文件的內(nèi)容。必須正確理解二進(jìn)制文件結(jié)構(gòu)和序列化規(guī)則,才能準(zhǔn)確地理解二進(jìn)制文件內(nèi)容并且設(shè)計(jì)正確的反序列化規(guī)則。所謂序列化,簡(jiǎn)單地說(shuō)就是把內(nèi)存中的數(shù)據(jù)在不丟失其類(lèi)型信息的情況下轉(zhuǎn)成對(duì)象的二進(jìn)制形式的過(guò)程,對(duì)象序列化后的形式經(jīng)過(guò)正確的反序列化過(guò)程應(yīng)該能夠準(zhǔn)確無(wú)誤地恢復(fù)為原來(lái)的對(duì)象。Python中常用的序列化模塊有pickle、struct、marshal和shelve等。在此以pickle模塊介紹二進(jìn)制文件的基本操作。2.5二進(jìn)制文件操作1、pickle模塊使用pickle模塊里最常用的兩個(gè)函數(shù)就是對(duì)象的序列化與反序列化函數(shù)。(1)對(duì)象的序列化格式:dump(obj,file)功能:序列化對(duì)象obj,并將結(jié)果數(shù)據(jù)流寫(xiě)入到文件對(duì)象file中。(2)對(duì)象的反序列化格式:load(file)功能:反序列化對(duì)象。將文件中的數(shù)據(jù)解析為一個(gè)Python對(duì)象。2.5二進(jìn)制文件操作【例7?12】pickle模塊使用。假設(shè)有一組學(xué)生信息,每個(gè)學(xué)生信息包括學(xué)號(hào)、姓名、性別、年齡,將其存入文件students.dat中,然后再依次讀取出來(lái)。importpickle
students=[['1001','張明','男',23],['1002','王芳','女',22],['1003','劉明','男',24]]withopen('d:/students.dat','wb')asfp:pickle.dump(students,fp)
withopen('d:/students.dat','rb')asfp:datas=pickle.load(fp)fordataindatas:print(data)2.5二進(jìn)制文件操作2、二進(jìn)制模式讀寫(xiě)文本文件實(shí)際上所有文件都是二進(jìn)制文件,因?yàn)槲募拇鎯?chǔ)就是一串二進(jìn)制數(shù)據(jù)。文本文件也是二進(jìn)制文件,只不過(guò)存儲(chǔ)的二進(jìn)制數(shù)據(jù)能通過(guò)一定的編碼轉(zhuǎn)換為能夠識(shí)別的字符而已。二進(jìn)制文件認(rèn)為數(shù)據(jù)都是字節(jié)流,因此不存在編碼問(wèn)題,只有文本文件才有編碼問(wèn)題。文本文件因其本質(zhì)也是二進(jìn)制文件,因此也可以二進(jìn)制模式讀寫(xiě)文本文件。在采用二進(jìn)制模式讀寫(xiě)時(shí)只能用read()和write()方法,讀寫(xiě)的只能是字節(jié)流。寫(xiě)入時(shí)可以通過(guò)encode()方法將字符串編碼成字節(jié)流,或是直接寫(xiě)入字節(jié)串。讀出時(shí)可利用decode()將字節(jié)流解碼。2.5二進(jìn)制文件操作>>>fp=open('d:/test.dat','wb')#以二進(jìn)制寫(xiě)模式打開(kāi)文件>>>fp.write('thisisatest'.encode())#將字符串編碼后寫(xiě)入14>>>fp.write(b'hello')#可以寫(xiě)入字節(jié)串5>>>fp.write('python')#二進(jìn)制模式讀寫(xiě)時(shí)不能直接寫(xiě)入字符串Traceback(mostrecentcalllast):File"<pyshell#36>",line1,in<module>fp.write('python')TypeError:abytes-likeobjectisrequired,not'str'>>>fp.close()2.5二進(jìn)制文件操作>>>fp=open('d:/test.dat','rb')#以二進(jìn)制讀模式打開(kāi)文件>>>fp.read()b'thisisatesthello'#讀出來(lái)的是字節(jié)串>>>fp.seek(0)#將指針移動(dòng)文件頭0>>>fp.read().decode()#將讀出來(lái)的字節(jié)串解碼'thisisatesthello'>>>fp.close()實(shí)際上對(duì)以二進(jìn)制模式寫(xiě)入的文本文件讀時(shí)也可用文本模式讀取。>>>fp=open('d:/test.dat','r')>>>fp.read()'thisisatesthello'2.6文件和目錄操作1、os模塊方法功能說(shuō)明remove(fn)刪除指定文件fn,如文件不存在拋出異常rename(src,dst)文件重命名getcwd()獲取當(dāng)前目錄listdir([path])返回當(dāng)前目錄或指定目錄下的所有文件和子目錄mkdir(path)創(chuàng)建一個(gè)目錄rmdir(path)刪除指定目錄(要?jiǎng)h除目錄須為空目錄)chdir(path)改變當(dāng)前目錄2.6文件和目錄操作>>>importos#導(dǎo)入os模塊>>>os.remove('d:/score.csv')#刪除文件>>>os.rename('d:/score2.csv','d:/score.csv')#文件重命名>>>os.mkdir('d:/tt')#創(chuàng)建目錄>>>os.mkdir('d:/tt/t1')>>>os.mkdir('d:/tt/t2')>>>os.listdir('d:/tt')#顯示指定目錄中內(nèi)容['t1','t2']>>>os.rmdir('d:/tt/t1')#刪除目錄>>>os.listdir('d:/tt')['t2']>>>os.chdir('d:/tt')#改變當(dāng)前目錄>>>os.getcwd()#獲取當(dāng)前目錄'd:\\tt'2.6文件和目錄操作2、os.path模塊方法功能說(shuō)明abspath(path)返回指定路徑的絕對(duì)路徑basename(path)返回指定路徑的文件名dirname(path)返回指定路徑的目錄名exists(path)判斷給定的路徑或文件是否存在isabs(path)判斷給定的路徑是否為絕對(duì)路徑isdir(path)判斷給定的路徑是否為目錄isfile(path)判斷給定的路徑是否為文件getsize(path)獲取給定路徑的大小getctime(path)獲取路徑創(chuàng)建時(shí)間getmtime(path)獲取路徑修改時(shí)間getatime(path)獲取路徑最后一次訪(fǎng)問(wèn)時(shí)間2.6文件和目錄操作>>>importos.path#導(dǎo)入os.path模塊>>>os.path.abspath('d:/temp/t')#返回指定路徑的絕對(duì)路徑'd:\\temp\\t'>>>os.path.basename('d:/temp/t1/data2.txt')#返回文件名'data2.txt'>>>os.path.dirname('d:/temp/t1/data2.txt')#返回路徑名'd:/temp/t1'>>>os.path.exists('d:/temp/t1/data2.txt')#判斷文件是否存在True>>>os.path.isabs('d:/temp/t1/data2.txt')#判斷是否是絕對(duì)路徑True>>>os.path.isdir('d:/temp/t1/data2.txt')#判斷是否是目錄False>>>os.path.isfile('d:/temp/t1/data2.txt')#判斷是否是文件True2.6文件和目錄操作>>>os.path.getsize('d:/temp/t1/data2.txt')#獲取文件大小34>>>os.path.getctime('d:/temp/t1/data2.txt')#返回文件創(chuàng)建時(shí)間戳1547901065.8160024>>>os.path.getmtime('d:/temp/t1/data2.txt')#返回文件修改時(shí)間戳1547886607.8997464>>>os.path.getatime('d:/temp/t1/data2.txt')#返回文件最后一次訪(fǎng)問(wèn)時(shí)間戳1547901065.81600242.7文件使用示例【例7?13】設(shè)有一python程序文件(擴(kuò)展名為.py),給其行首加上行號(hào)。fn='d:/ch308.py'#原文件newfn=fn[:-3]+'_new.py'#加行號(hào)后的新文件名withopen(fn,'r',encoding='utf-8')asfp:#讀出原文件lines=fp.readlines()lines=[str(index)+''*3+lineforindex,lineinenumerate(lines,1)]#在每一行前面加上行號(hào)withopen(newfn,'w',encoding='utf-8')asfp:#寫(xiě)回到文件中fp.writelines(lines)2.7文件使用示例【例7?14】將一組學(xué)生的信息(姓名、語(yǔ)文成績(jī)、數(shù)學(xué)成績(jī)、英語(yǔ)成績(jī))寫(xiě)入到文件score.txt中,一行存儲(chǔ)一個(gè)學(xué)生的信息,各字段間以逗號(hào)分隔。然后讀取文件中內(nèi)容計(jì)算每個(gè)學(xué)生的平均分,將結(jié)果(姓名,平均成績(jī))寫(xiě)入到文件result.txt中。students=['王芳,89,98,78\n','劉梅,90,80,98\n','孫明,87,67,76\n']withopen('d:/score.txt','w')asfp:#寫(xiě)到文件中fp.writelines(students)withopen('d:/score.txt','r')asfp1,open('d:/result.txt','w')asfp2:forlineinfp1:stuname=line.strip().split(',')[0]#取出學(xué)生姓名score=list(map(int,line.strip().split(',')[1:]))#取學(xué)生成績(jī)aver=round(sum(score)/len(score),2)#求平均成績(jī),保留2位小數(shù)fp2.write(stuname+','+str(aver)+'\n')#將姓名、平均成績(jī)寫(xiě)入文件中2.7文件使用示例【例7?15】將指定目錄下所有的.txt文件改名為原文件名_new.txt。importos
path='d:/temp'#指定目錄os.chdir(path)#修改當(dāng)前目錄#找出當(dāng)前目錄下所有的.txt文件fnlist=[fnforfninos.listdir()ifos.path.isfile(fn)andfn.endswith('.txt')]forfninfnlist:#將每個(gè)文件依次改名newname=fn[:-4]+'_new.txt'#新文件名os.rename(fn,newname)#重命名3.1數(shù)據(jù)的導(dǎo)入任務(wù)實(shí)施3.2數(shù)據(jù)的導(dǎo)出Python程序設(shè)計(jì)3.3系統(tǒng)界面3.4系統(tǒng)測(cè)試3.1
數(shù)據(jù)的導(dǎo)入設(shè)學(xué)生基本信息數(shù)據(jù)保存在一個(gè)文本文件中,文件中每一行是一條學(xué)生記錄,各字段之間用逗號(hào)分隔。在任務(wù)6實(shí)現(xiàn)的學(xué)生信息管理類(lèi)StudentList中添加一個(gè)數(shù)據(jù)導(dǎo)入方法,代碼如下:defload(self,fn):#導(dǎo)入學(xué)生信息ifos.path.exists(fn):withopen(fn,'r',encoding='utf-8')asfp:whileTrue:fs=fp.readline().strip('\n')ifnotfs:breakelse:stu=Student(*fs.split(','))self.stulist.append(stu)print('導(dǎo)入完畢')else:print('要導(dǎo)入的文件不存在')3.2
數(shù)據(jù)的導(dǎo)出將學(xué)生基本信息數(shù)據(jù)導(dǎo)出到文本文件中,文件中每一行存放一條學(xué)生記錄,各字段之間用逗號(hào)分隔。在任務(wù)6實(shí)現(xiàn)的學(xué)生信息管理類(lèi)StudentList中添加一個(gè)數(shù)據(jù)導(dǎo)出方法,代碼如下:defsave(self,fn):#導(dǎo)出學(xué)生信息withopen(fn,'w',encoding='utf-8')asfp:forstuinself.stulist:fp.write(stu.no+',')fp.write(+',')fp.write(str(stu.chinese)+',')fp.write(str(stu.math)+',')
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣東建工恒福物業(yè)有限公司招聘?jìng)淇碱}庫(kù)參考答案詳解
- 2026年中國(guó)雄安集團(tuán)公共服務(wù)管理有限公司招聘?jìng)淇碱}庫(kù)及答案詳解一套
- 2026年天津大學(xué)福州國(guó)際聯(lián)合學(xué)院人事管理崗人員招聘?jìng)淇碱}庫(kù)有答案詳解
- 2026年南京鼓樓醫(yī)院人力資源服務(wù)中心招聘?jìng)淇碱}庫(kù)及參考答案詳解
- 2026年廣東南方財(cái)經(jīng)全媒體集團(tuán)股份有限公司招聘?jìng)淇碱}庫(kù)及一套完整答案詳解
- 2026年太平健康養(yǎng)老(北京)有限公司招聘?jìng)淇碱}庫(kù)有答案詳解
- 2026年【FSGSX招聘】新疆和安縣某國(guó)有企業(yè)招聘?jìng)淇碱}庫(kù)完整答案詳解
- 2026年廣西廣電網(wǎng)絡(luò)科技發(fā)展有限公司河池分公司招聘6人備考題庫(kù)及答案詳解一套
- 2026年中遠(yuǎn)海運(yùn)(青島)有限公司招聘?jìng)淇碱}庫(kù)有答案詳解
- 2026年內(nèi)蒙古包鋼鑫能源有限責(zé)任公司招聘?jìng)淇碱}庫(kù)及參考答案詳解一套
- 物業(yè)服務(wù)部安全生產(chǎn)崗位責(zé)任清單
- 考點(diǎn)21 三角恒等變換4種常見(jiàn)考法歸類(lèi)(解析版)
- 2023年04月青海西寧大通縣生態(tài)環(huán)境綜合行政執(zhí)法大隊(duì)公開(kāi)招聘編外工作人員2人筆試歷年難易錯(cuò)點(diǎn)考題含答案帶詳細(xì)解析
- 腎上腺神經(jīng)母細(xì)胞瘤影像診斷與鑒別診斷
- GB/T 42340-2023生態(tài)系統(tǒng)評(píng)估生態(tài)系統(tǒng)格局與質(zhì)量評(píng)價(jià)方法
- 工會(huì)基礎(chǔ)知識(shí)試題及答案600題
- GB/T 39267-2020北斗衛(wèi)星導(dǎo)航術(shù)語(yǔ)
- GB/T 20659-2006石油天然氣工業(yè)鋁合金鉆桿
- GB/T 1800.2-2020產(chǎn)品幾何技術(shù)規(guī)范(GPS)線(xiàn)性尺寸公差I(lǐng)SO代號(hào)體系第2部分:標(biāo)準(zhǔn)公差帶代號(hào)和孔、軸的極限偏差表
- GA/T 848-2009爆破作業(yè)單位民用爆炸物品儲(chǔ)存庫(kù)安全評(píng)價(jià)導(dǎo)則
- NB∕T 10731-2021 煤礦井下防水密閉墻設(shè)計(jì)施工及驗(yàn)收規(guī)范
評(píng)論
0/150
提交評(píng)論