文件操作介绍 操作文件 打开文件 在python代码中open命令可以打开一个已经存在的文件,或者创建一个不存在的文件(默认参数为’r’) 当使用r参数打开文件,表示只是读取文件,文件必须存在 当使用w参数打开文件,表示可以对文件有写权限,文件不存在时会创建文件,文件存在时会清空里边数据并且将自定义数据写入 w+参数:w参数和r参数结合 当使用a参数打开文件,表示可以对文件有写权限,文件不存在时会创建文件,文件存在时会在文件末尾追加自定义数据 a+参数:a参数和r参数结合 b参数:一般与r,w,a参数配合使用,主要用途为打开二进制文件,例如,视频文件和图片文件 文件对象的属性 mode:查看文件属性 name:查看文件名称 closed:关闭文件(每次打开文件操作完成后记得关闭文件) read:读取文件 write:自定义写入的数据 readlines:读取文件所有内容返回一个列表 指针定位 读取和写入文件时,都是以光标为基准在后边读取或写入内容,如果用a权限打开文件,这时就需要用到指针定位 tell:指针当前所在位置
seek:移动指针位置 seek有两个参数,偏移量和方向 0表示文件开头 1表示当前位置 2表示文件末尾
with语句 with语句可以帮助我们在对文件完成操作后自动关闭文件 练习1 有两个分别名为txt和jpg文件,请备份这两个文件 os模块 os,语义为操作系统,处理操作系统相关的功能,可跨平台。比如显示当前目录下所有文件、删除某个文件、获取文件大小 参数 os.name:查看操作系统名称,Windows为nt,linux为posix os.mkdir:创建目录 os.mknod:建立文件(只能在linux中使用) os.rmdir:删除目录 os.remove:删除文件 os.path.exists:判断一个文件是否存在 os.path.getsize:判断一个文件是否为空 os.path.isabs:判断是否为绝对路径,文件不存在也会判断,(判断文件前有没有加路径符号) os.path,abspath:生成绝对路径 os.path.join(当前目录的绝对路径,文件名/目录名):返回一个绝对路径,当前目录的绝对路径+文件名/目录名 os.path.basename:获取文件名 os.path.dirname:获取目录名 练习2 批量创建文件,文件名为hello{1…5}后缀分别为(.txt,.jpg,.gif) json模块 JSON是一种轻量级的数据交换格式 JSON采用完全独立于语言的文本格式但是也使用了类似于C语言家族的习惯 这些特性使JSON成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成 json格式转换 python转json格式使用dumps参数,或者使用dump格式直接将python格式转换成json格式并且存储到一个文件 json格式转pthon使用load或loads参数 练习3 读取一个文件显示除了以“#”开头以外的所有的行 练习4 学生管理系统(文件版) 1:必须使用自定义函数完成对程序的模块化 2:学生信息至少包含:姓名,年龄,学号,除此之外可以适当添加 3:必须完成的功能:添加,删除,修改,查询,退出
import json import caozuo def info(name,age:int,StudentID,**kwargs): return {StudentID:{'姓名':name,'年龄':age,'成绩':kwargs}} if __name__ == '__main__': while True: operate = input('请输入想要进行的操作(add,,remove,revise,inquire,exit):') if operate == 'add': name = input('请输入学生姓名: ') age = int(input('请输入学生年龄:')) StudentID = input('请输入学生学号:') grades = input('请输入学生成绩:') line = info(name=name,age=age,StudentID=StudentID,grades=grades) if not caozuo.path.getsize('实验/学生管理文件.json'): with open('实验/学生管理文件.json',mode='w',encoding='utf-8') as f: json.dump(line,f,indent=4,ensure_ascii=False) else: with open('实验/学生管理文件.json', mode='r', encoding='utf-8') as f: d = json.load(f) if StudentID in d: print('该学号已存在,请输入正确学号!') else: with open('实验/学生管理文件.json', mode='w', encoding='utf-8') as f: d.update(line) json.dump(d,f,indent=4,ensure_ascii=False) elif operate == 'remove': while True: L = input('请输入删除学生信息学生的学号或者exit返回上层:') if L != 'exit': with open('实验/学生管理文件.json',encoding='utf-8') as f: langs = json.load(f) if L not in langs: print('该学号不存在,请输入正确学号!') else: with open('实验/学生管理文件.json',mode='w',encoding='utf-8') as f: langs.pop(L) json.dump(langs,f,indent=4,ensure_ascii=False) else: break elif operate == 'revise': while True: L = input('请输入需要修改学生信息的学号或者exit返回上层:') if L != 'exit': with open('实验/学生管理文件.json', encoding='utf-8') as f: lang = json.load(f) if L not in lang: print('该学号不存在,请输入正确学号!') else: new_name = input('请输入修改后学生姓名: ') new_age = int(input('请输入修改后学生年龄:')) new_StudentID = input('请输入修改后学生学号:') new_grades = input('请输入修改后学生成绩:') new_line = info(name=new_name, age=new_age, StudentID=new_StudentID, grades=new_grades) if new_StudentID in lang and new_StudentID != L: print('该学号已存在') else: with open('实验/学生管理文件.json', mode='w', encoding='utf-8') as f: lang.update(new_line) json.dump(lang, f, indent=4, ensure_ascii=False) else: break elif operate == 'inquire': while True: L = input('请输入需要查询学生信息的学生学号或输入exit返回上层:') if L != 'exit': with open('实验/学生管理文件.json', encoding='utf-8') as f: lan = json.load(f) if L not in lan: print('该学号不存在,请输入正确学号!') else: print(lan[L]) else: break elif operate == 'exit': exit() else: print('请输入正确的操作(add,remove,revise,inquire,exit)')