文件与文件夹的常用操作

一、文件

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()
扩展:
1>
os.path.dirname(path)方法:去掉文件名,返回目录
2>
os.path.join(path1,path2)方法:用于路径拼接文件路径,将文件路径path1后面加上路径path2

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

 

 
 

 
posted @ 2020-11-22 16:52  马铃薯1  阅读(686)  评论(0编辑  收藏  举报