檔案與資料夾的常用操作
阿新 • • 發佈:2020-11-22
一、檔案
1.重新命名:
rename("需要修改的檔名","新的檔名")
import os
os.rename("123.txt","456.txt")
import os # 檔案重新命名 name_1 = input("請輸入要重新命名的檔名:") name_2 = input("修改後的檔名為:") os.rename(name_1,name_2) print("檔案重新命名完成!")
2.刪除檔案:
remove("待刪除檔案的名字")
import os
os.rename("123.txt")
import os # 刪除檔案(不會刪除到回收站,直接檔案刪除)name_3 = input("要刪除的檔名為:") os.remove(name_3) print("檔案刪除成功!")
二、資料夾
1.獲取當前所在路徑:
getcwd()
import os
os.getcwd()
import os # 獲取當前資料夾路徑 print("當前資料夾路徑:",os.getcwd()) # 當前資料夾路徑: D:\python\PyCharmProjects\08_檔案
2.改變預設目錄:
chdir()
import os
os.chdir("要修改的預設目錄")
import os # 修改預設的當前資料夾路徑os.chdir("C:/Users/馬鈴薯/Desktop") # 修改後的資料夾路徑 print("修改後的資料夾路徑:",os.getcwd()) # 修改後的資料夾路徑: C:\Users\馬鈴薯\Desktop
3.建立資料夾:
mkdir()
import os
os.mkdir()
import os # 建立一個資料夾 new_dir = input("請輸入要建立的新資料夾名字:") os.mkdir(new_dir) print("建立資料夾成功!")
4.刪除資料夾:
rmdir()
import os
os.rmdir("要刪除的資料夾目錄")
import os # 刪除一個資料夾 delete_dir = input("請輸入要刪除的資料夾名字:") os.rmdir(delete_dir) print("刪除資料夾成功!")
5.獲取資料夾中所有的子檔案(返回一個列表):
listdir()
6.判斷是否為檔案:
os.path.isfile()
7.判斷是否為資料夾:
os.path.isdir()
import os # 遍歷當前資料夾的檔案 print("遍歷當前資料夾的所有檔案:") # 1.當前檔案路徑 currentPath = os.getcwd() # 2.獲取指定資料夾中所有的子檔案(返回一個列表) files = os.listdir(currentPath) # 遍歷所有檔案 for fileName in files: # 判斷是否是檔案 if os.path.isfile(fileName): print("{0}\t檔案...".format(fileName)) # 判斷是否是資料夾 elif os.path.isdir(fileName): print("{0}\t資料夾...".format(fileName)) else: print("{0}\t即不是檔案,也不是資料夾...".format(fileName))
例項1:
指定檔案中,統計有效程式碼的行數
""" 統計所有的程式碼 1.統計單個檔案中的程式碼 a.單行註釋的排除 b.多行註釋的排除 c.判斷是否為空行\n 2.找出某資料夾中所有的檔案(.py檔案) """ import os # 統計指定檔案中,程式碼的行數 def codeCounter(filePath): # 記錄程式碼的總行數 lines = 0 # 記錄多行註釋的開關 switch = True # 開啟檔案 # 判斷目標檔案,是否是檔案 if os.path.isfile(filePath): file = open(filePath,"r",encoding="utf-8") # 讀取內容(逐行讀取,迴圈) content = file.readline() while content != "": # 判斷讀取到的內容是否應該記錄行數 # 1.處理多行註釋 str1 = "\"\"\"" if str1 in content: # switch = not switch 比 switch = False 的好處在於,"""是成對出現的,遇到另外一個""",開關switch還可以變為True switch = not switch # 當開關switch = True 時,代表多行註釋結束,統計行數(目前只存在單行註釋,和有效程式碼行) if switch == True: # 2.處理單行註釋 if "#" not in content: lines += 1 content = file.readline() # 關閉檔案 file.close() else: # 目標檔案不存在 print("很抱歉,您輸入的檔名有誤,請核對後再次輸入...") return lines print("列印檔案中的行數:",codeCounter("Test01.py"))
例項2
考核點:函式+檔案處理+學生管理系統
""" 考核點:函式+檔案處理+學生管理系統 考核內容: 學生管理系統: 1.新增學生功能 2.刪除學生功能 3.檢視所有學生功能 4.退出系統功能 資料結構: student = ["學生名1","學生名2","學生名3",...] 實現資料持久化: 第一次操作完退出系統,下次進來的時候,上次操作完的資料依舊存在 (退出前,先儲存資料,登陸時,先載入上次儲存的資料,如果檔案存在再載入) 注意: 不同的功能,儘量使用函式封裝 """ import os # 用來儲存所有學生資訊 students = [] # 判斷是否查詢到指定學生的標記 index = False # 當查詢到指定學生的標記時,記錄此時的索引值 index_1 = None # 用相對路徑來寫,檔案路徑 fileName = "students.txt" class Students(): def __init__(self): # # 在程式最開始的時候,將資料從檔案中加載出來 Students.loadStudents(self, fileName) # 列印選單 def show_menu(self): print("1.新增學生操作") print("2.查詢學生操作") print("3.刪除學生操作") print("4.修改學生操作") print("5.展示所有學生") print("6.退出系統操作") # 新增學生功能 def append_stu(self): # 用巢狀字典,儲存單個學生資訊 student = {"id": self.id, "name": self.name, "special": self.special, "college": self.college} # 將單個學生資訊,新增到學生列表中 students.append(student) print("新增成功!") # 查詢學生功能 def search_stu(self,id): # 判斷學生資訊裡面,是否有要查詢的學生學號 # 1.遍歷每個的學生資訊的索引 for index_stu in range(len(students)): # 2.判斷是否有要查詢的學生學號 if id not in students[index_stu]["id"]: # 沒有找到,不執行操作 pass else: # 找到要查詢的資料,並進行後續操作(此時要宣告index,index_1為全域性變數) global index,index_1 index = True index_1 = index_stu # 刪除學生功能 def delete_stu(self): # 要先判斷學生資訊庫裡面,是否有要刪除的學生學號(呼叫查詢學生函式) Students.search_stu(self, self.delete_id) # 如果查詢到指定學生(即index = True),進行刪除操作 if index == True: del students[index_1] print("刪除成功!") else: print("很遺憾,學生資訊庫裡沒有您要刪除的學生學號:{},請核對後再次操作...".format(self.delete_id)) # 修改學生資訊 def update_stu(self): # 要先判斷學生資訊庫裡面,是否有要修改的學生學號(呼叫查詢學生函式) Students.search_stu(self, self.update_id) # 如果查詢到要修改的學生學號存在(即index = True),進行修改操作 if index == True: # 找到要修改的資料,並進行後續修改操作 new_name = input("請輸入修改後的學生姓名:") students[index_1]["name"] = new_name new_special = input("請輸入修改後的專業名稱:") students[index_1]["special"] = new_special new_college = input("請輸入修改後的學院名稱:") students[index_1]["college"] = new_college print("修改成功!") else: print("很遺憾,學籍資訊裡沒有您要修改的學生學號:{},請核對後再次操作...".format(self.update_id)) # 展示所有學生資訊 def show_all_stu(self): print("展示所有學生資訊如下:") for all_stu in students: print("學號:{0}\t姓名:{1}\t專業:{2}\t學院:{3}".format(all_stu["id"],all_stu["name"],all_stu["special"],all_stu["college"])) # 計算指定檔案中程式碼的行數 def codeCounter(filePath): # 記錄程式碼的總行數 lines = 0 # 判斷目標檔案,是否是檔案 if os.path.isfile(filePath): file = open(filePath, "r", encoding="utf-8") # 讀取內容(逐行讀取,迴圈) content = file.readline() while content != "": lines += 1 content = file.readline() else: # 目標檔案不存在 print("很抱歉,您輸入的檔名有誤,請核對後再次輸入...") return lines # 從檔案中載入資料 def loadStudents(self,fileName): list_keys = [] list_values = [] # 判斷檔案是否存在(開啟檔案之前,保證檔案是存在的) if os.path.exists(fileName): count = Students.codeCounter(fileName) print("計算行數:", count) file = open(fileName,"r",encoding="utf-8") # 處理每一條學生資料 for dict_count in range(count // 8): for i in range(4): list_key = file.readline() list_key = list_key[:-1] list_keys.append(list_key) # print(list_keys) for j in range(4): list_value = file.readline() list_value = list_value[:-1] list_values.append(list_value) # print(list_values) students_1 = dict(zip(list_keys, list_values)) global students students.append(students_1) print(students) file.close() else: # 主要解決,第一次執行時,沒有檔案存在的情況 pass # 將列表中的資料寫入檔案 def saveStudents(self,fileName): file = open(fileName,"w",encoding="utf-8") for stu in students: for stu_keys in stu.keys(): file.write(stu_keys+"\n") for stu_values in stu.values(): file.write(stu_values + "\n") file.close() print("寫入資料完畢!") # 測試函式 def test(self): while True: # # # 在程式最開始的時候,將資料從檔案中加載出來 # Students.loadStudents(self,fileName) print("---------- 學生管理系統 ----------") # 呼叫顯示系統選單的函式 Students.show_menu(self) input_1 = input("請輸入要執行的操作1-6:") if input_1 == "1": # ----------- 1.新增學生操作 ------------ id = input("請輸入要新增的學生學號:") self.id = id name = input("請輸入學生的姓名:") self.name = name special = input("請輸入學生的專業:") self.special = special college = input("請輸入學生的學院:") self.college = college # 呼叫新增學生操作 Students.append_stu(self) elif input_1 == "2": # ----------- 2.查詢學生操作 ------------ search_id = input("請輸入要查詢的學生編號:") self.search_id = search_id # 呼叫查詢學生操作 Students.search_stu(self,self.search_id) # 如果查詢到指定圖書(即index = True),進行列印操作 if index == True: # 找到要查詢的資料,進行後續操作 print("學號:{0}\t姓名:{1}\t專業:{2}\t學院:{3}".format(students[index_1]["id"],students[index_1]["name"],students[index_1]["special"],students[index_1]["college"])) else: print("很遺憾,學籍資訊裡沒有您要查詢的學生學號:{},請核對後再次操作...".format(self.search_id)) elif input_1 == "3": # ----------- 3.刪除學生操作 ------------ delete_id = input("請輸入要刪除的學生學號:") self.delete_id = delete_id # 呼叫刪除學生操作 Students.delete_stu(self) elif input_1 == "4": # ----------- 4.修改學生操作 ------------ update_id = input("請輸入要修改的學生學號:") self.update_id = update_id # 呼叫修改學生操作 Students.update_stu(self) elif input_1 == "5": # ----------- 5.展示所有學生操作 ------------ # 呼叫展示所有學生資訊 Students.show_all_stu(self) elif input_1 == "6": # ----------- 6.退出學生系統操作 ------------ # # 在程式結束之前,將資料寫入到檔案 Students.saveStudents(self,fileName) print("感謝您的使用,下次再見...") exit() else: print("輸入指令有誤,請按照提示重新輸入...") stu_2 = Students() stu_2.test()