Python編程從入門到實(shí)戰(zhàn)-輕松過二級 (思政版)(第2版) 課件 Ch06 輸入、輸出和文件處理_第1頁
Python編程從入門到實(shí)戰(zhàn)-輕松過二級 (思政版)(第2版) 課件 Ch06 輸入、輸出和文件處理_第2頁
Python編程從入門到實(shí)戰(zhàn)-輕松過二級 (思政版)(第2版) 課件 Ch06 輸入、輸出和文件處理_第3頁
Python編程從入門到實(shí)戰(zhàn)-輕松過二級 (思政版)(第2版) 課件 Ch06 輸入、輸出和文件處理_第4頁
Python編程從入門到實(shí)戰(zhàn)-輕松過二級 (思政版)(第2版) 課件 Ch06 輸入、輸出和文件處理_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第二版本章要點(diǎn):6.1輸入和輸出概述6.2命令行參數(shù)6.3標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出函數(shù)6.4文件和文件對象6.5文本文件的讀取和寫入6.6CSV格式文件的讀取和寫入第6章輸入、輸出和文件處理本章要點(diǎn):6.7JSON格式文件的讀取和寫入6.8隨機(jī)文件的讀取和寫入6.9os模塊和文件目錄操作6.10綜合應(yīng)用:文件數(shù)據(jù)的統(tǒng)計(jì)和分析第6章輸入和輸出概述6.1輸入和輸出概述Python程序通常可以使用下列方式之一實(shí)現(xiàn)交互功能:輸入輸出程序處理圖6-1程序的輸入和輸出示意圖(1)命令行參數(shù)。(2)標(biāo)準(zhǔn)輸入和輸出函數(shù)。(3)文件輸入和輸出。(4)圖形化用戶界面6.2命令行參數(shù)通過列表sys.argv訪問命令行參數(shù)argv[0]為Python腳本名,argv[1]為第1個(gè)參數(shù),argv[2]為第2個(gè)參數(shù)【例6.1】命令行參數(shù)示例(hello_argv.py)。在操作系統(tǒng)命令行界面運(yùn)行Python程序時(shí),根據(jù)所指定的命令行參數(shù),顯示輸出相應(yīng)的Hello信息importsysprint('Hello,'+sys.argv[1])命令行參數(shù)類型轉(zhuǎn)換按慣例,命令行輸入?yún)?shù)argv[1]、argv[2]等為字符串,所以如果希望傳入的參數(shù)為數(shù)值,則需要使用轉(zhuǎn)換函數(shù)int()或者float()將字符串轉(zhuǎn)換為適合的類型【例6.2】命令行參數(shù)示例(randomseq.py):生成n個(gè)隨機(jī)數(shù),其中,n由程序的第一個(gè)命令行參數(shù)所確定importsys,randomn=int(sys.argv[1])foriinrange(n):print(random.randrange(0,100))6.3標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出函數(shù)input函數(shù)的格式print函數(shù)的格式print函數(shù)用于打印一行內(nèi)容,即將多個(gè)以分隔符(sep,默認(rèn)為空格)分隔的值(value,...,以逗號分隔的值),寫入到指定文件流(file,默認(rèn)為控制臺sys.stdout)。參數(shù)end指定換行符;flush指定是否強(qiáng)制寫入到流【6.3】輸入函數(shù)和輸出函數(shù)示例1>>>print(1,2,3)#輸出時(shí)采用默認(rèn)分隔符(空格)。輸出:123123>>>print(1,2,3,sep=',')#輸出時(shí)采用逗號(,)分隔符。輸出:1,2,31,2,3>>>print(1,2,3,sep=',',end='.\n')#輸出時(shí)采用逗號分隔符,最后以點(diǎn)結(jié)束并換行1,2,3.>>>foriinrange(5):#輸出時(shí)使用空格代替換行符

print(i,end='')01234【例6.4】輸入函數(shù)和輸出函數(shù)示例2(io_test2.py)importdatetimesName=input("請輸入您的姓名:")#輸入姓名birthyear=int(input("請輸入您的出生年份:"))#輸入出生年份age=datetime.date.today().year-birthyear#根據(jù)當(dāng)前年份和出生年份計(jì)算年齡print("您好!{0}。您{1}歲。".format(sName,age))【例6.5】從控制臺讀取n個(gè)整數(shù)并計(jì)算其累計(jì)和(io_sum.py)n由程序的第一個(gè)命令行參數(shù)所確定importsysn=int(sys.argv[1])#命令行第一個(gè)參數(shù)確認(rèn)所需求和的整數(shù)個(gè)數(shù)ntotal=0#設(shè)置求和初始值=0foriinrange(n):number=int(input('請輸入整數(shù):'))#輸入整數(shù)total+=number#整數(shù)累加print('累計(jì)和為:’,total)#輸出n個(gè)整數(shù)累計(jì)和交互式用戶輸入【例6.6】編寫程序(stat.py),輸入批量數(shù)據(jù)(假定當(dāng)輸入-1時(shí),終止輸入),統(tǒng)計(jì)所輸入的數(shù)據(jù)個(gè)數(shù),并求總和以及平均值a=[]#初始化列表x=float(input("請輸入一個(gè)實(shí)數(shù),輸入-1終止:"))whilex!=-1:a.append(x)#將所輸入的實(shí)數(shù)添加到列表中x=float(input("請輸入一個(gè)實(shí)數(shù),輸入-1終止:"))print("計(jì)數(shù):",len(a))#列表長度即為實(shí)數(shù)個(gè)數(shù)print("求和:",sum(a))#列表中各元素求和print("平均值:",sum(a)/len(a))#列表中各元素求平均值6.4文件和文件對象文件對象和open函數(shù)使用open()函數(shù)時(shí),可以指定打開文件的模式mode為:'r'(只讀)、'w'(寫入,寫入前刪除舊內(nèi)容)、'x'(創(chuàng)建新文件,如果文件存在,則導(dǎo)致FileExistsError)、'a'(追加)、'b'(二進(jìn)制文件)、't'(文本文件,默認(rèn)值)、'+'(更新,讀寫)文件的打開、寫入、讀取和關(guān)閉通過內(nèi)置函數(shù)open()可創(chuàng)建或打開文件對象通過文件對象的實(shí)例方法write/writelines,可以寫入字符串到文本文件通過文件對象的實(shí)例方法read/readline,可以讀取文本文件的內(nèi)容文件讀寫完成后,應(yīng)該使用close方法關(guān)閉文件【例6.7】讀取并輸出文本文件(type_file.py)

importsysfilename=sys.argv[0]#所讀取并輸出的就是本程序文件type_file.pyf=open(filename,'r',encoding='utf8')#打開文件line_no=0#統(tǒng)計(jì)行號whileTrue:line_no+=1#行號計(jì)數(shù)line=f.readline()#讀取行信息ifline:print(line_no,":",line)#輸出行號和該行內(nèi)容else:breakf.close()#關(guān)閉打開的文件with語句和上下文管理協(xié)議實(shí)現(xiàn)上下文管理協(xié)議的對象文件對象支持使用with語句,確保打開的文件自動(dòng)關(guān)閉importsysfilename=sys.argv[0]#所讀取并輸出的就是本程序文件type_file_with.pyline_no=0#統(tǒng)計(jì)行號withopen(filename,'r',encoding='utf8')asf:#使用with語句實(shí)現(xiàn)上下文管理協(xié)議forlineinf:line_no+=1#行號計(jì)數(shù)print(line_no,":",line)#輸出行號和該行內(nèi)容f.close()#可以省略【例6.8】利用with語句讀取并輸出文本文件(type_file_with.py)6.5文本文件的讀取和寫入在使用open()函數(shù)打開或創(chuàng)建一個(gè)文件時(shí),其默認(rèn)的打開模式為只讀文本文件。文本文件用于儲存文本字符串,默認(rèn)編碼為Unicode存儲在文本文件中的數(shù)據(jù)也可以是結(jié)構(gòu)化數(shù)據(jù),例如一維數(shù)據(jù)或者二維數(shù)據(jù)一般地,結(jié)構(gòu)化數(shù)據(jù)文件的存儲通常使用特殊分隔符,例如空格分隔、逗號分隔(CSV,Comma-SeparatedValues)、制表符分隔(TSV,Tab-SeparatedValues)、換行分隔,或者其他分隔符分隔一維數(shù)據(jù)文件通常存儲同一個(gè)維度的多個(gè)數(shù)據(jù)處理一維數(shù)據(jù)文件的方式是首先讀取文本文件內(nèi)容,然后使用字符串的split方法拆分各字段內(nèi)容二維數(shù)據(jù)文件通常存儲兩個(gè)維度的數(shù)據(jù),每一行表示一條記錄的多個(gè)字段處理二維數(shù)據(jù)文件的方式是首先讀取文本文件內(nèi)容,然后分別處理各行文本。用戶可以使用字符串的split方法拆分各字段內(nèi)容。但更有效的方法是針對特定的格式,使用CSV或JSON模塊提供的函數(shù)直接進(jìn)行處理文本文件的寫入打開文件、寫入數(shù)據(jù)和關(guān)閉文件1.創(chuàng)建或打開文件對象通過內(nèi)置函數(shù)open()可以創(chuàng)建或打開文件對象,可以指定覆蓋模式(文件存在時(shí))、編碼和緩存大小2.寫入字符串到文本文件打開文件后,可以使用其實(shí)例方法write()/writelines(),寫入字符串到文本文件??梢允褂脤?shí)例方法flush強(qiáng)制把緩沖的數(shù)據(jù)更新到文件中f.write(s)#把字符串s寫入到文件ff.writelines(lines)#依次把列表lines中的各字符串寫入到文件ff.flush()#把緩沖的數(shù)據(jù)更新到文件中3.關(guān)閉文件寫入文件完成后,應(yīng)該使用close方法關(guān)閉流,以釋放資源,并把緩沖的數(shù)據(jù)更新到文件中f.close()#關(guān)閉文件【例6.9】文本文件的寫入示例(textwrite.py)withopen(r'c:\pythonb\data1.txt','w')asf:f.write('123\n')#寫入字符串f.write('abc\n')#寫入字符串f.writelines(['456\n','def\n'])#寫入字符串文本文件的讀取打開文件、讀取數(shù)據(jù)和關(guān)閉文件1.打開文件對象通過內(nèi)置函數(shù)open()可以打開文件對象。可以指定編碼和緩存大小。例如:f1=open('data1.txt','r')#打開data1.txt,若文件不存在,則導(dǎo)致FileNotFoundError2.從打開的文本文件中讀取字符數(shù)據(jù)打開文件后,可以使用下列實(shí)例方法讀取字符數(shù)據(jù)。f.read():從f中讀取剩余內(nèi)容直至文件結(jié)尾,返回一個(gè)字符串。f.read(n):從f中讀取至多n個(gè)字符,返回一個(gè)字符串;如果n為負(fù)數(shù)或None,讀取直至文件結(jié)尾。f.readline():從f中讀取1行內(nèi)容,返回一個(gè)字符串。f.readlines():從f中讀取剩余多行內(nèi)容,返回一個(gè)列表。3.關(guān)閉文件可以使用close方法關(guān)閉流,以釋放資源。通常采用with語句,以保證系統(tǒng)自動(dòng)關(guān)閉打開的流【例6.10】文本文件的讀取示例withopen(r'c:\pythonb\data1.txt','r')asf:forsinf.readlines():print(s,end='')文本文件的編碼文本文件用于存儲編碼的字符串,使用open()函數(shù)打開文本文件時(shí),可以指定所使用的編碼,函數(shù)形式如下Python內(nèi)置的編碼包括utf-8、utf8、latin-1、latin1、iso-8859-1、mbcs(僅Windows系統(tǒng))、ascii、utf-16、utf-32等>>>f=open("1.txt",mode="w",encoding="utf-8")逗號分隔符文本格式csv.reader對象和csv文件的讀取。本節(jié)基于以下scores.csv文件,其內(nèi)容為:6.6CSV文件格式的讀取和寫入(1)學(xué)號,姓名,性別,班級,語文,數(shù)學(xué),英語102111,宋頤園,男,一班,72,85,82102113,王二丫,女,一班,75,82,51102131,董再永,男,三班,55,74,79102121,陳香燕,女,二班,80,86,68102135,周一萍,女,三班,72,76,72【例16.11】使用reader對象讀取csv文件importcsvdefreadcsv1(csvfilepath):withopen(csvfilepath,newline='')asf:#打開文件f_csv=csv.reader(f)#創(chuàng)建csv.reader對象headers=next(f_csv)#標(biāo)題print(headers)#打印標(biāo)題(列表)forrowinf_csv:#循環(huán)打印各行(列表)print(row)if__name__=='__main__':readcsv1(r'scores.csv')CSV文件格式的讀取和寫入(2)csv.writer對象和csv文件的寫入【例16.12】使用writer對象寫入csv文件importcsvdefwritecsv1(csvfilepath):headers=['學(xué)號','姓名','性別','班級','語文','數(shù)學(xué)','英語']rows=[('102111','宋頤園','男','一班','72','85','82'),('102113','王二丫','女','一班','75','82','51')]withopen(csvfilepath,'w',newline='')asf:#打開文件

f_csv=csv.writer(f)#創(chuàng)建csv.writer對象

f_csv.writerow(headers)#寫入1行(標(biāo)題)

f_csv.writerows(rows)#寫入多行(數(shù)據(jù))if__name__=='__main__':writecsv1(r'scores1.csv')6.7JSON格式文件的讀取和寫入JSON(JavaScriptObjectNotation,JavaScript對象標(biāo)記)定義了一種標(biāo)準(zhǔn)格式,用字符串來描述典型的內(nèi)置對象(如字典、列表、數(shù)字和字符串)。雖然JSON原來是JavaScript編程語言的一個(gè)子集,但它現(xiàn)在是一個(gè)獨(dú)立于語言的數(shù)據(jù)格式,所有主流編程語言都有生產(chǎn)和消費(fèi)的JSON數(shù)據(jù)的庫JSON是網(wǎng)絡(luò)數(shù)據(jù)交換的流行格式之一Python標(biāo)準(zhǔn)庫模塊json包含將Python對象編碼為JSON格式(簡稱JSON)和將JSON解碼到Python對象的函數(shù):dumps(obj):返回把obj對象序列化為JSON字符串。dump(obj,fp):把obj對象序列化為JSON字符串寫入到文件fp。loads(s):返回把JSON字符串s反序列化后的對象。load(fp):返回把從文件fp中讀取JSON字符串反序列化后的對象。>>>importjson>>>data=[{'a':'A','b':(2,4),'c':3.0}]>>>str_json=json.dumps(data)>>>str_json#輸出:'[{"a":"A","c":3.0,"b":[2,4]}]'>>>data1=json.loads(str_json)>>>data1#輸出:[{'a':'A','c':3.0,'b':[2,4]}]JSON文件的寫入和讀取【例6.13】JSON文件的寫入(對象JSON格式系列化)(json_dump.py)importjsonurls={'baidu':'/','sina':'/','tencent':'/','taobao':'/'}withopen(r'c:\pythonb\data.json','w')asf:json.dump(urls,f)【例6.14】JSON文件的讀取(對象JSON格式反系列化)(json_load.py)importjsonwithopen(r'c:\pythonb\data.json','r')asf:urls=json.load(f)print(urls)6.8隨機(jī)文件的讀取和寫入創(chuàng)建或打開隨機(jī)文件使用內(nèi)置函數(shù)open(),指定打開模式'+‘定位使用其實(shí)例方法seek進(jìn)行定位寫入/讀取數(shù)據(jù)使用其實(shí)例方法write/read關(guān)閉文件使用close方法關(guān)閉流,以釋放資源【例6.15】隨機(jī)文件的讀寫示例importosf=open('data.dat','w+b')#創(chuàng)建或打開文件data.datf.seek(0)#定位到開始位置f.write(b'Hello')#寫入字節(jié)數(shù)據(jù)f.write(b'World')#寫入字節(jié)數(shù)據(jù)f.seek(-5,os.SEEK_END)#定位到結(jié)束位置倒數(shù)第5個(gè)位置b=f.read(5)#讀取5個(gè)字節(jié)print(b)#輸出:b'World'6.9os模塊和文件目錄操作使用標(biāo)準(zhǔn)庫中的os模塊,用戶可以實(shí)現(xiàn)操作系統(tǒng)的目錄處理創(chuàng)建目錄、刪除目錄:getcwd()(獲取當(dāng)前工作目錄)、chdir()(切換當(dāng)前工作目錄)、mkdir()(創(chuàng)建單級目錄)、makedirs()(創(chuàng)建多級目錄)、listdir()(顯示目錄中的文件/子目錄列表)、rmdir()(刪除目錄)、remove()(刪除文件)和rename()(文件或目錄重命名)等函數(shù)【例6.16】文件目錄操作示例>>>importos>>>os.getcwd()#顯示當(dāng)前目錄'C:\\Users\\jh\\AppData\\Local\\Programs\\Python\\Python312'>>>os.chdir(r"c:\pythonb")#切換當(dāng)前目錄>>>os.listdir(r"c:\pythonb")#列舉當(dāng)前目錄中的內(nèi)容['ch01','ch02','ch03','ch04','ch05','ch06','ch07','ch08','ch09','ch10','ch11','ch12','data.json','data1.txt']>>>os.makedirs(r"c:\pythonb\temp\dir1")#創(chuàng)建多級子目錄。注:mkdir()只能創(chuàng)建一級子目錄>>>os.rename(r"c:\pythonb\temp\dir1",r"c:\pythonb\temp\dir2")#子目錄重命名6.10綜合應(yīng)用:文件數(shù)據(jù)的統(tǒng)計(jì)和分析6.10.1統(tǒng)計(jì)儲存在文本文件中的學(xué)生成績信息【例6.17】編寫程序(process_txt.py):讀取data.txt中的數(shù)據(jù)(假設(shè)文件中存儲若干成績,每行一個(gè)成績),統(tǒng)計(jì)分析成績的個(gè)數(shù)、最高分、最低分以及平均分,并把結(jié)果寫入result.txt文件中scores=[]#創(chuàng)建空列表,用于儲存從文本文件中讀取的成績信息txtfilepath='data.txt'withopen(txtfilepath,encoding='utf-8')asf:#打開文件forsinf.readlines():#讀取并遍歷文件行scores.append(int(s))result_filepath='result.txt'withopen(result_filepath,'w',encoding='utf-8')asf:#打開文件f.write("成績個(gè)數(shù):{}\n".format(len(scores)))f.write("最高分:{}\n".format(max(scores)))f.write("最低分:{}\n".format(min(scores)))f.write("平均分:{}\n".format(sum(scores)/len(scores)))6.10.2統(tǒng)計(jì)儲存在CSV文件中的學(xué)生成績信息【例6.18】編寫程序(read_csv.py):讀取data.csv中的數(shù)據(jù),統(tǒng)計(jì)分析成績的平均值,并打印出結(jié)果。假設(shè)data.csv的內(nèi)容如下importcsvscores=[]#創(chuàng)建空列表,用于儲存從csv文件中讀取的成績信息csvfilepath='data.csv'withopen(csvfilepath,newline='')asf:#打開文件f_csv=csv.reader(f)#創(chuàng)建csv.reader對象headers=next(f_csv)#標(biāo)題forrowinf_csv:#循環(huán)讀取各行(列表)scores.append(row)print("原始記錄:",scores)scoresData=[]forrecinscores:scoresData.append(int(rec[2]))print("成績列表:",scoresData)print("平均成績:",sum(scoresData)/len(scoresData))6.10.3基于字典的通信錄本節(jié)實(shí)現(xiàn)一個(gè)簡單的基于字典數(shù)據(jù)結(jié)構(gòu)的通信錄管理系統(tǒng)。系統(tǒng)采用JSON文件來保存數(shù)據(jù)。通信錄設(shè)計(jì)為字典{name:tel}。程序開始時(shí)從addressbook.json文件中讀取通信錄,然后顯示主菜單,具體包括如下功能。(1)顯示通訊錄清單。如果通信錄字典中存在用戶信息,則顯示通訊錄清單,包括姓名和電話號碼;如果通信錄字典中不存在任何用戶信息,則提示“通訊錄為空”。(2)查詢聯(lián)系人。提示用戶輸入姓名name,在通信錄字典中查詢該鍵,如果存在,輸出聯(lián)系人信息;如果不存在,提示是否新建聯(lián)系人。(3)插入新的聯(lián)系人。提示用戶輸入姓名name,在通信錄字典中查詢該鍵,如果存在,提示是否更新聯(lián)系人信息;如果不存在,提示輸入電話號碼,并插入字典鍵-值對。(4)刪除已有聯(lián)系人。提示用戶輸入姓名name,在通信錄字典中查詢該鍵,如果不存在,輸出“聯(lián)系人不存在”的提示信息;如果存在,從通信錄字典中刪除鍵-值對,并輸出信息。(5)退出。保存通信錄字典到addressbook.json中,退出循環(huán)【例6.19】基于字典的通信錄(addressbook.py)(1)"""簡易通信錄程序"""importos,jsonab={}#通信錄保存在字典中#從JSON文件中讀取通信錄ifos.path.exists("addressbook.json"):withopen(r'addressbook.json','r',encoding='utf-8')asf:ab=json.load(f)whileTrue:print("|---歡迎使用通訊錄程序---|")print("|---1:顯示通訊錄清單---|")print("|---2:查詢聯(lián)系人資料---|")print("|---3:插入新的聯(lián)系人---|")print("|---4:刪除已有聯(lián)系人---|")print("|---0:退出-------------|")choice=input('請選擇功能菜單(0-4):’)ifchoice=='1':if(len(ab)==0):print("通訊錄為空")else:fork,vinab.items():print("姓名={},聯(lián)系電話={}".format(k,v))【例6.19】基于字典的通信錄(addressbook.py)(2)

elifchoice=='2':name=input("請輸入聯(lián)系人姓名:")if(namenotinab):ask=input("

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論