文件与文件夹的常用操作
一、文件
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()