Python程序設計項目化教程- 課件 項目八 簡易通訊錄-文件操作_第1頁
Python程序設計項目化教程- 課件 項目八 簡易通訊錄-文件操作_第2頁
Python程序設計項目化教程- 課件 項目八 簡易通訊錄-文件操作_第3頁
Python程序設計項目化教程- 課件 項目八 簡易通訊錄-文件操作_第4頁
Python程序設計項目化教程- 課件 項目八 簡易通訊錄-文件操作_第5頁
已閱讀5頁,還剩39頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

項目八簡易通訊錄——文件操作textbook教材Python程序設計項目化教程孫海洋

編著

電子工業出版社ISBN:9787121477546項目描述【項目描述】設計制作一個簡易通訊錄程序,實現對聯系人相關信息的增刪改查等操作。Contents目錄01.靈活進行文件目錄管理——初識文件和目錄02.錄入學生信息——寫入操作03.讀取學生信息——讀取操作05.項目小結04.項目實施PartOne靈活進行文件目錄管理——初識文件和目錄掌握文件和目錄的基本概念掌握對目錄的常見操作【任務描述】使用shutil.copytree函數復制整個目錄樹,并源目錄和目標目錄下的所有條目。文件文件三要素:文件路徑、文件名和后綴如何在Python中表示該文件的標識呢?格式一:使用原生串(推薦方式)【注意】Python中通常在表示文件標識的字符串前加r或R,表示原始字符串(原生串),以避免對路徑中包含的'\t'、'\b'、'\n'等進行轉義。如:r"D:\Project_8\task1\data.txt"其中,r"D:\Project_8\task1\"為文件路徑,data為文件名稱,.txt為文件擴展名即后綴。格式二:使用'/'作為路徑分隔符

如"D:/Project_8/task1/data1.txt"格式三:使用'\\'作為路徑分隔符

如"D:\\Project_8\\task1\\data2.txt"目錄及文件操作1.獲取當前(工作)目錄—os.getcwd()方法【原型】os.getcwd()2.判斷目錄是否存在—os.path.exists()方法【原型】os.path.exists(path)

【功能描述】若傳入的path存在,則返回True,否則,返回False。目錄及文件操作3.創建目錄—os.mkdir()方法【原型】os.mkdir(path,mode=0o777,*,dir_fd=None)

【功能描述】創建名為path的單級目錄,如果目錄已經存在,則會拋出FileExistsError異常。如果路徑中的父目錄不存在,則會拋出FileNotFoundError異常。只需傳入path參數。【示例】D盤根目錄下不存在Python_test目錄,則創建該目錄。目錄及文件操作4.創建多級目錄—os.makedirs()方法【原型】os.makedirs(name,mode=0o777,exist_ok=False)

【功能描述】遞歸創建多級目錄,若目錄已存在,則創建時拋出異常。5.刪除非空目錄—os.rmdir()方法【原型】os.rmdir(path,*,dir_fd=None)【功能描述】刪除某個存在的且為空(該目錄下不存在文件)的目錄路徑。如果待刪除目錄不存在,則拋出FileNotFoundError異常。如果待刪除目錄非空,則拋出OSError異常。目錄及文件操作6.刪除目錄樹—shutil.rmtree()方法【原型】shutil.rmtree(path,ignore_errors=False,onerror=None,*,dir_fd=None)【功能描述】若path目錄存在,則刪除path整個目錄樹。7.更改當前目錄—os.chdir()方法【原型】os.chdir(path)【功能描述】將當前工作目錄更改為指定路徑。目錄及文件操作8.復制目錄樹—shutil.copytree()方法【原型】shutil.copytree(src,dst,symlinks=False,ignore=None,copy_function=copy2,ignore_danging_symlinks=False,dirs_exist_ok=False)【功能描述】以src為根的整個目錄樹復制到名為dst的目錄中,并返回目標目錄。若目標目錄dst已存在,則調用該函數時會拋出異常。9.獲取文件名列表—os.listdir()方法【原型】os.listdir(path='.')【功能描述】返回一個目錄列表,其中包含按路徑給定目錄中的條目名稱。目錄及文件操作10.重命名文件或文件夾—os.rename()【原型】os.rename(src,dst,*,src_dir_fd=None,dst_dir_fd=None)【功能】將文件或目錄src重命名為dst。若存在dst,則操作將失敗。用os.rename()不僅可以修改文件名,還可以修改文件夾名。【示例】修改已存在的文件名data.txt為price.txt運行結果如下:任務實施本機運算結果如下:檢查提供的路徑是否存在導入shutil模塊,用于執行目錄復制操作PartTwo錄入學生信息——寫入操作掌握文件的打開和關閉操作能夠實現文件寫入操作【任務描述】實現向文件中寫入若干學生信息的功能。文件打開與關閉方法1.方式一open-close打開文件open【原型】open(filename,mode,encoding=None)【說明】若當前目錄下該文件不存在,則新建該名字的空文件,而不會拋出FileNotFoundError異常。文件名稱。編碼格式,避免解碼錯誤設為utf-8格式。文件操作模式,常見模式有r(只讀)、w(只寫入等關閉文件close【原型】close()【功能描述】通常與open函數配合使用,用于關閉打開的文件,調用格式為:fileObj.close()【說明】以默認只讀r方式打開,若文件不存在,則拋出FileNotFoundError異常文件打開和關閉2.方式二withopenas結構【結構】【說明】該結構無須顯式調用close關閉文件,執行完該結構,文件將關閉并釋放系統資源。【示例】以只讀的方式打開當前目錄下的文件sale.txt。文件寫入方法write()方法【原型】write(text,/),【調用格式】f.write(text)【功能描述】把字符串寫入文件,返回寫入字符串的長度。text只能是字符串,不能為字符串序列。【案例1】運行上述代碼輸出12,表示寫入字符串的長度。【案例2】若把若干數據寫入到當前目錄下的test.txt中,只能一行一行寫文件寫入方法writelines()方法【原型】writelines(lines,/),【調用格式】f.writelines(lines)【功能描述】向文件中寫入多行文本。【示例】閱讀以下程序,分析寫入文件的內容及格式。【分析】列表ls中存儲的是待寫入文件的字符串列表,writelines每寫入一個串后并不會自動加換行符,故如需換行,要主動添加\n。任務實施將學生姓名和學生學號追加寫入文件,后面跟一個空格。將學生成績追加寫入文件,后面跟一個換行符如果用戶選擇添加學生(輸入'1'),則調用add函數。選擇刪除學生(輸入’2')、選擇修改學生(輸入'3'),當前什么也不做(pass語句表示空操作)。任務實施檢查目錄d是否存在,如果不存在,則使用os.mkdir創建它。構建存儲學生信息的文件的完整路徑。任務實施運行結果如圖:PartThree讀取學生信息——讀取操作掌握文件的打開和關閉操作能夠實現文件讀取操作【任務描述】從文件中讀取相關學生信息并輸出。文件讀取方法1.read(size)方法調用格式:f.read(size)【功能描述】1.讀取并返回文件中的數據。2.在文本模式下返回字符串,在二進制模式下返回字節對象。4.當size省略或為負值時,讀取整個文件。5.如果已經到達文件的末尾,則f.read()將返回一個空字符串("")2.readline()方法

調用格式:f.readline()【功能描述】1.讀取文件的一行,包含換行符\n。2.若返回空字符串則表示文件末尾。3.空行由“\n”表示,該字符串只包含一個換行符。讀取操作【案例】使用readline讀取并輸出D:\Data\data.txt文件中的信息,如圖所示。操作步驟:使用with-open-as結構打開文件。→循環讀取,使用len判斷文件結束。→使用rstrip去除行尾換行符。→輸出處理后的數據。參考代碼1:參考代碼2:3.readlines()方法【原型】readlines(hint=-1,/)【功能描述】默認一次性讀取并返回文件中所有行的字符串列表。其中列表中的每個元素代表文件的一行對應字符串。readlines(-1)或readlines(0)表示讀取文件的所有行,如果文件總字節數是hint值的整數倍,則返回讀取行數等于總字節數/hint;否則,返回讀取行數等于總字節數/hint的整數值+1。【示例】使用readlines讀取并輸出D:\Data\data.txt文件中的信息,如圖所示。讀取操作任務實施show函數用于顯示存儲在文件中的所有學生信息。它首先打印標題,然后讀取文件中的每一行,使用split()按空格分割每行以獲取學生的姓名、學號和成績,并打印出來。任務實施任務實施運行結果如下:PartFour項目實施項目實施add函數用于添加新的聯系人信息。它首先打印分隔線,然后打開一個文件用于寫入,接著提示用戶輸入聯系人的姓名、電話、性別和描述,并將這些信息寫入文件,每項信息之間用空格分隔。show函數用于顯示文件中所有聯系人的信息。它打印分隔線和標題,然后讀取文件中的每一行,并顯示出來。項目實施遍歷所有行,如果行中包含用戶輸入的姓名,則將該行添加到result列表中。若result列表不為空,即找到匹配的聯系人,打印標題行。遍歷result列表中的每個聯系人,將聯系人信息按空格分割成列表s。項目實施初始化兩個列表,ls_keep用于存儲不需要刪除的行,ls_del用于存儲需要刪除的行。遍歷所有行,如果行包含用戶輸入的姓名,則添加到ls_del列表中,否則添加到ls_keep列表中。如果ls_del列表為空,表示沒有找到要刪除的聯系人,打印提示信息。如果找到了要刪除的聯系人,以寫入模式打開文件,并將ls_keep列表中的行寫回文件,實現刪除操作。項目實施遍歷每行,如果行中不包含用戶指定的姓名,則將其添加到ls_keep列表中。否則打印分割線等提示,并將當前行按空格分割成單獨的信息項從分割后的列表中分別提取姓名、電話、性別和描述。根據用戶選擇,提示用戶輸入新的信息項,并更新相應的變量。項目實施將修改后的信息重新組合成一行字符串并輸出,同時將修改后的信息添加到ls_keep列表中。項目實施項目實施【運行結果1】添加操作項目實施【運行結果2】查詢操作項目實施【運行結果3】刪除操作項目實施【運行結果4】修改操作PartFive項目小結項目小結知

點示

例說

明目錄管理獲取當前目錄:os.getcwd()方法importosos.getcwd()判斷目錄是否存在:os.path.exists()方法返回True或False創建目錄:os.mkdir()方法若目錄已存在則會拋出異常,故使用os.path.exists(path)先行判斷再創建創建多級目錄:os.makedirs()方法創建多級目錄,若目錄已存在,則創建時拋出異常刪除非空目錄:os.rmdir()方法刪除目錄樹:shutil.rmtree()方法復制目錄樹:shutil.copytree()方法shutil.copytree(src,dst)將src目錄樹復制到dst目錄中,若dst已存在,則拋出FileExistsError異常更改當前目錄:os.chdir()方法獲取文件名列表:os.listdir()方法os.listdir(path='.')返回一個列表,其中包含指定目錄中的條目名稱重命名文件(夾):os.rename()方法項目小結知識點示例說明文件打開與關閉f=open(file,mode,encoding=None)#文件操作f.close()

mode:打開模式二進制模式:b,如'rb'encoding通常設為'utf-8'文件打開模式默認文本模式,二進制模式加b單一模式:只讀('r'),覆蓋寫('w'),追加寫('a')讀寫模式:'r+'、'w+'、'a+'二進制模式:加b,如'rb+'不支持'rw'、'ra'等模式withopen()as

操作文件withopen('f.txt','w',encoding='utf-8')asf:

f.write('Hello,world.\n')使用該結構無須再顯式調用close函數關閉文件常見寫操作文件寫入內容:f.write(text)方法withopen('f.txt','w',encoding='utf-8')asf:

f.write('Hello,world.\n')其中f為文件對象,text為待寫入字符串文件寫入多行內容:writelines(lines)方法ls=['Hello','Python']withopen('file.txt','w',encoding='utf-8')asf:

f.writelines(ls)lines為待寫入的內容,可以是字符串或者字符串序列項目小結知識點示例說明常見讀操作文件讀取:read(size)

溫馨提示

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

評論

0/150

提交評論