文件操作介绍
操作文件
打开文件
在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)')