1. 程式人生 > 實用技巧 >檔案與資料夾的常用操作

檔案與資料夾的常用操作

一、檔案

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()