day07.檔案操作/綜合應用【Python教程】

day07.檔案操作/綜合應用【Python教程】
一、檔案操作介紹
<1>什麼是檔案
示例如下:

<2>檔案的作用
大家應該聽說過一句話:“好記性不如爛筆頭”。
不僅人的大腦會遺忘事情,計算機也會如此,比如一個程式在執行過程中用了九牛二虎之力終於計算出了結果,試想一下如果不把這些資料存放起來,相比重啟電腦之後,“哭都沒地方哭了”
可見,在把資料儲存起來有做麼大的價值
使用檔案的目的:
就是把一些儲存存放起來,可以讓程式下一次執行的時候直接使用,而不必重新制作一份,省時省力
二、檔案的開啟與關閉
想一想:
如果想用word編寫一份簡歷,應該有哪些流程呢?
開啟word軟體,新建一個word檔案
寫入個人簡歷資訊
儲存檔案
關閉word軟體
同樣,在操作檔案的整體過程與使用word編寫一份簡歷的過程是很相似的
開啟檔案,或者新建立一個檔案
讀/寫資料
關閉檔案
<1>開啟檔案
在python,使用open函式,可以開啟一個已經存在的檔案,或者建立一個新檔案
open(檔名,訪問模式)
示例如下:

說明:
訪問模式說明
r以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。
w開啟一個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
a開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
rb以二進位制格式開啟一個檔案用於只讀。檔案指標將會放在檔案的開頭。這是預設模式。
wb以二進位制格式開啟一個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
ab以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
r+開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。
w+開啟一個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
a+開啟一個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。
rb+以二進位制格式開啟一個檔案用於讀寫。檔案指標將會放在檔案的開頭。
wb+以二進位制格式開啟一個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
ab+以二進位制格式開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。
<2>關閉檔案
close( )
示例如下:

三、檔案的讀寫
<1>寫資料(write)
使用write()可以完成向檔案寫入資料
demo:

執行現象:

注意:
如果檔案不存在那麼建立,如果存在那麼就先清空,然後寫入資料
<2>讀資料(read)
使用read(num)可以從檔案中讀取資料,num表示要從檔案中讀取的資料的長度(單位是位元組),如果沒有傳入num,那麼就表示讀取檔案中所有的資料
demo:

執行現象:

注意:
如果open是開啟一個檔案,那麼可以不用謝開啟的模式,即只寫open('test.txt')
如果使用讀了多次,那麼後面讀取的資料是從上次讀完後的位置開始的
<3>讀資料(readlines)
就像read沒有引數時一樣,readlines可以按照行的方式把整個檔案中的內容進行一次性讀取,並且返回的是一個列表,其中每一行的資料為一個元素

執行現象:

<4>讀資料(readline)


想一想:
如果一個檔案很大,比如5G,試想應該怎樣把檔案的資料讀取到記憶體然後進行處理呢?
四、應用1:製作檔案的備份
任務描述
輸入檔案的名字,然後程式自動完成對檔案進行備份


參考程式碼


五、檔案的隨機讀寫
什麼是定位?



<1>獲取當前讀寫的位置
在讀寫檔案的過程中,如果想知道當前的位置,可以使用tell()來獲取

<2>定位到某個位置
如果在讀寫檔案的過程中,需要從另外一個位置進行操作的話,可以使用seek()
seek(offset, from)有2個引數
offset:偏移量
from:方向
0:表示檔案開頭
1:表示當前位置
2:表示檔案末尾
demo:把位置設定為:從檔案開頭,偏移5個位元組

demo:把位置設定為:離檔案末尾,3位元組處

六、檔案的重新命名、刪除
有些時候,需要對檔案進行重新命名、刪除等一些操作,python的os模組中都有這麼功能
<1>檔案重新命名
os模組中的rename()可以完成對檔案的重新命名操作
rename(需要修改的檔名, 新的檔名)

<2>刪除檔案
os模組中的remove()可以完成對檔案的刪除操作
remove(待刪除的檔名)

七、資料夾的相關操作
實際開發中,有時需要用程式的方式對資料夾進行一定的操作,比如建立、刪除等
就像對檔案操作需要os模組一樣,如果要操作資料夾,同樣需要os模組
<1>建立資料夾

<2>獲取當前目錄

<3>改變預設目錄

<4>獲取目錄列表

<5>刪除資料夾

八、應用:批量修改檔名
<1>執行過程演示
執行程式之前

執行程式之後

<2>參考程式碼

九、綜合應用:學生管理系統(檔案版)
#用來儲存名片
card_infors = []
def print_menu():
"""完成列印功能選單"""
print("="*50)
print(" 名片管理系統 V0.01")
print(" 1. 新增一個新的名片")
print(" 2. 刪除一個名片")
print(" 3. 修改一個名片")
print(" 4. 查詢一個名片")
print(" 5. 顯示所有的名片")
print(" 6. 儲存資訊")
print(" 7. 退出系統")
print("="*50)
def add_new_card_infor():
"""完成新增一個新的名片"""
new_name = input("請輸入新的名字:")
new_qq = input("請輸入新的QQ:")
new_weixin = input("請輸入新的微信:")
new_addr = input("請輸入新的住址:")
#定義一個新的字典,用來儲存一個新的名片
new_infor = {}
new_infor['name'] = new_name
new_infor['qq'] = new_qq
new_infor['weixin'] = new_weixin
new_infor['addr'] = new_addr
#將一個字典,新增到列表中
global card_infors
card_infors.append(new_infor)
#print(card_infors)# for test
def find_card_infor():
"""用來查詢一個名片"""
global card_infors
find_name = input("請輸入要查詢的姓名:")
find_flag = 0#預設表示沒有找到
for temp in card_infors:
if find_name == temp["name"]:
print("%s\t%s\t%s\t%s"%(temp['name'], temp['qq'], temp['weixin'], temp['addr']))
find_flag=1#表示找到了
break
#判斷是否找到了
if find_flag == 0:
print("查無此人....")
def show_all_infor():
"""顯示所有的名片資訊"""
global card_infors
print("姓名\tQQ\t微信\t住址")
for temp in card_infors:
print("%s\t%s\t%s\t%s"%(temp['name'], temp['qq'], temp['weixin'], temp['addr']))
def save_2_file():
"""把已經新增的資訊儲存到檔案中"""
f = open("backup.data", "w")
f.write(str(card_infors))
f.close()
def load_infor():
global card_infors
try:
f = open("backup.data")
card_infors = eval(f.read())
f.close()
except Exception:
pass
def main():
"""完成對整個程式的控制"""
#恢復(載入)之前的資料到程式中
load_infor()
#1. 列印功能提示
print_menu()
while True:
#2. 獲取使用者的輸入
num = int(input("請輸入操作序號:"))
#3. 根據使用者的資料執行相應的功能
if num==1:
add_new_card_infor()
elif num==2:
pass
elif num==3:
pass
elif num==4:
find_card_infor()
elif num==5:
show_all_infor()
elif num==6:
save_2_file()
elif num==7:
break
else:
print("輸入有誤,請重新輸入")
print("")
if __name__ == "__main__":
#呼叫主函式
main()
十一、作業
1. 讀取一個檔案,顯示除了以井號(#)開頭的行以外的所有行
2. 製作一個"密碼薄",其可以儲存一個網址(例如 www.javahelp.com.cn),和一個密碼(例如 123456),請編寫程式完成這個“密碼薄”的增刪改查功能,並且實現檔案儲存功能

相關文章
- Go檔案操作綜合指南Go
- python交教程4:檔案操作Python
- Python:檔案操作詳細教程Python
- SCAU 高程綜合實驗:檔案操作與字元處理字元
- Python 使用ConfigParser操作ini配置檔案教程。Python
- python菜鳥教程學習13:檔案操作Python
- Python讀寫txt檔案、轉換csv檔案與pandas條件計數、求和的綜合運用Python
- Python操作檔案Python
- 1.4檔案操作之修改程式配置檔案小應用
- 資料型別綜合應用資料型別
- python_檔案操作Python
- 1.4.0 Python檔案操作Python
- Python 檔案操作(一)Python
- python 操作整理檔案Python
- Python的檔案操作Python
- Python檔案的操作Python
- Python入門教程之檔案讀寫操作知識Python
- Xamarin Essentials應用教程檔案系統FileSystem
- python對檔案的操作Python
- python3.7 檔案操作Python
- 7、python之檔案操作Python
- python--檔案操作指南Python
- Python 檔案、目錄操作Python
- Python基礎——檔案操作Python
- python檔案讀寫操作Python
- 18 Python如何操作檔案?Python
- python 檔案操作入門Python
- FFmpeg在遊戲影片錄製中的應用:畫質與檔案大小的綜合比較遊戲
- 010.OpenShift綜合實驗及應用
- Python配置檔案使用教程Python
- python讀寫excel檔案簡單應用PythonExcel
- Python批處理:檔案操作Python
- python file 檔案操作筆記Python筆記
- Python OS模組操作檔案Python
- python pyyaml操作yaml配置檔案PythonYAML
- Python之合併PDF檔案Python
- 綜合設計——多源異構資料採集與融合應用綜合實踐
- Python學習筆記|Python之檔案操作Python筆記