一、文件操作
补充:打开文件的时候如果是以读的方式打开,如果文件不存在会报:FileNotFoundError。
打开文件的时候是以写的方式打开,如果文件不存在会自动创建对应的文件。
打开文件和关闭文件的缩写
with open(文件路径 ,打开方式,encoding=编码方式) as 文件对象:
文件操作相关的代码
说明:打开文件,执行完文件操作相关的代码后,会自动关闭打开的这个文件。
代码
with open('./files/aaa.txt','w',encoding='utf-8') as f1:
f1.write('床前明月光,\n 疑是地上霜。\n')
测试结果
1.PNG1.二进制文件的读和写
常见的二进制文件:视频文件、音频文件、图片文件、压缩包等都是属于二进制文件。
bytes --> 字节,是python中专门用来表示二进制的数据类型
'注意:二进制文件不能设置文件编码方式(不能给encoding赋值)'
代码
with open('files/ship.bmp','rb') as f2:
content = f2.read()
print(type(content),content)
with open('./files/new.jpg','wb') as f3:
f3.write(content)
测试结果
2.1.PNG 2.2.PNG二、json文件(特别重要)
json是一种特定格式的数据,主要用来在互联网上做文本数据传输。
json数据本身是文本数据,json文件就是后缀.json的文件,并且文件内容必须满足json格式的要求。
1.json格式
a.一个json对应一条数据。
b.json中的数据必须是json对应的数据类型。
数字类型(number) --> 所有的数字,包含整数和小数,例如:100,12.5
字符串类型(string) --> 用双引号括起来的数据,例如"abc","你好,世界!"
数组(array) --> 相当于python中的列表,例如[100,230,"abc","你好"]
字典(dictionary) --> 相当于python中的字典,例如:{"a" :100,"b":[1,2,3,4,5],"c":{}}
布尔(bool) --> true和false
null --> 相当于None,用来表示空
2.python对json的支持
python中专门提供了一个json模块,用来处理json数据。
load(json文件对象) ---> 将json文件的内容读出来,并且将内容转换成python对应的数据类型
dump(内容,json文件路径) ---> 将指定的内容,以json格式写入到指定的json文件中
loads(json格式字符串) ---> 将字符串内容是json数据的字符串转换成python对应的数据类型
dumps(内容) ---> 将指定的内容,转换成json格式的字符串
json转换python
代码
json | python |
---|---|
数字 | int/float |
字符串 | str |
数组 | list |
字典 | dict |
true/false | True/False |
null | None |
(1)loads()
loads(字符串) --> 要求字符串的内容必须满足json格式
代码
import json
content = json.loads('100')
print(content,type(content))
content = json.loads('"abc"')
print(content,type(content))
content = json.loads('[12,12.8,"name",[1,"2a"]]')
print(content,type(content))
print(type(content[3]))
content = json.loads('{"a":100,"b":true,"c":false}')
print(content,type(content))
content = json.loads('null')
print(content)
测试结果
1.PNG(2)load()
load(文件对象) --> 将文件对象中的内容转换成python数据类型数据,要求文件中的内容必须是json格式的数据。
代码
import json
with open('./files/test.json') as f:
print(json.load(f))
测试结果
2.PNGpython | json |
---|---|
int/float | 数字 |
str | 字符串 |
list | 数组 |
dict | 字典 |
True/False | true/false |
None | null |
注意:除了上面列出的类型,其他类型不能直接转换成json格式的数据。
(3)dumps()
dumps(内容) --> 内容是python数据,返回值是一个字符串,并且字符串的内容是满足json格式的。
代码
import json
str1 = json.dumps({'a':12,'b':True,'c':'Hello'})
print(str1,type(str1))
str1 = json.dumps([1,2,'abc'])
print(str1)
str1 = json.dumps((100,200,'abc'))
print(str1)
测试结果
3.PNG(4)dump()
dump(内容,文件对象) --> 将内容以json格式写入文件中
代码
import json
with open('./files/test.json','w')as f:
json.dump({'a':100,'b':200,'c':True},f)
测试结果
4.PNG三、文件的使用
1.数据本地化的过程
1.使用数据的时候从本地文件中去取数据。
2.修改完数据后要使用新的数据去更新本地文件中的内容。
2.学生管理系统
1.添加学生,要求之前添加过的学生下次执行程序的时候还存在。
2.显示学生信息。
学生管理系统数据类型 --> [学生1,学生2],{'学号1':学生1,'学号2':学生2}
代码
import json
# 保存所有的学生
with open('./files/students.json','r') as f:
all_student = json.load(f)
def add_student():
"""
添加学生
"""
while True:
name = input('请输入学生的姓名:')
age = input('请输入学生的年龄:')
tel = input('请输入学生的电话:')
# 创建学生对应的字典
student = {'name':name,'age':age,'tel':tel}
#将学生添加到容器中
all_student.append(student)
# 将新的数据更新到本地文件中
with open('./files/students.json', 'w') as f:
json.dump(all_student,f)
print('添加成功!')
print('1.继续添加')
print('2.返回上一层')
input_value = input('请选择(1-2):')
if input_value == '1':
continue
else:
return
def show_student():
"""
显示学生
"""
for student in all_student:
print(student)
while True:
print('=======================')
print('1.添加学生')
print('2.显示学生信息')
print('3.退出')
print('=======================')
input_value = input('请选择(1-3):')
if input_value == '1':
add_student()
elif input_value == '2':
show_student()
else:
print('退出成功!')
break
测试结果
1.PNG3.在程序中声明一个变量用来保存当前程序执行的次数
代码
import json
with open('./files/number.json','r') as f:
num = json.load(f)
num += 1
with open('./files/number.json','w') as f:
json.dump(num,f)
print('当前程序执行的次数:',num)
测试结果
2.PNG四、异常捕获
1.报错 --> 出现异常(后面的代码不会执行,并且程序会直接结束)
代码
# a = 10 + 'abc'
2.异常捕获
出现异常后,不希望程序直接崩溃,而是想要自己对这个异常进行处理,就需要捕获异常。
格式1(可以捕获代码段1中出现的所有类型的异常):
try:
代码段1
except:
代码段2
finally:
代码段3
说明:执行代码段1并且检测代码段1是否发生异常,如果发生异常程序不崩溃而是直接执行代码段2。
代码
try:
value = input('请输入数字:')
float_value = float(value)
except:
print('出现了异常')
print('输入有误!')
try:
b = {'a':10}['b']
a = [1,2,3][4]
print('~~~~~')
except:
print('又出现异常了')
测试结果
1.PNG格式2:
try:
代码段1
except 异常类型:
代码段2
finally:
代码段3
说明:捕获代码段1中出现的指定类型的异常。
代码
try:
# print({'a':10}['b'])
print([1,2][3])
except IndexError:
print('出现异常2')
测试结果
2.PNG格式3:
try:
代码段1
except (异常类型1,异常类型2,...):
代码段2
finally:
代码段3
说明:捕获except后的括号中所有的异常。
代码
try:
print({'a':10}['b'])
print([1,2][3])
except (IndexError,KeyError):
print('出现异常3')
测试结果
3.PNG格式4:
try:
代码段1
except 异常类型1:
代码段2
except 异常类型2:
代码段2
finally:
代码段3
代码
try:
print([1, 2][3])
print({'a':10}['b'])
except IndexError:
print('下标越界')
except KeyError:
print('key不存在')
测试结果
4.PNGfinally后面等的代码段一定会执行(不管try里面的代码是否会出现异常以及出现异常后异常是否被捕获)
代码段
代码
try:
f = open('./files/abc.txt')
except FileNotFoundError:
print('文件不存在!')
finally:
print('最后会执行的代码')
测试结果
5.PNG3.抛出异常
raise 异常类型
异常类型要求:是Exception类的子类。
代码
value = int(input('请输入一个偶数:'))
if value & 1:
raise ValueError
else:
print('恭喜,还活着!')
测试结果
6.PNG五、作业(学生管理系统)
代码
import json
with open('./files/students.json', 'r') as f:
students = json.load(f)
with open('./files/users.json', 'r') as f:
users = json.load(f)
# 系统主页
def system_page():
print('\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')
print('+ +')
print(' 欢迎来到学生管理系统 ')
print('+ 1. 登录 +')
print('+ 2. 注册 +')
print('+ +')
print('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')
operate = input('请选择操作:')
if operate == '1':
login()
elif operate == '2':
register()
# 登录
def login():
name = input(' 用户名:')
password = input(' 密码:')
for user in users:
if user['name'] == name and user['password'] == password:
main_page()
break
elif user['name'] == name and user['password'] != password:
print('密码错误,请重新登录!')
login()
break
else:
print('不存在该用户!')
system_page()
# 注册
def register():
name = input(' 用户名:')
password = input(' 密码:')
for user in users:
if user['name'] == name:
print('该用户名已存在!')
register()
user = {'name': name, 'password': password}
users.append(user)
with open('./files/users.json', 'w') as f:
json.dump(users, f)
print('注册成功!')
system_page()
# 主页面
def main_page():
print('\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')
print('+ +')
print(' 欢迎来到学生管理系统 ')
print('+ 1. 添加学生 +')
print('+ 2. 查找学生 +')
print('+ 3. 删除学生 +')
print('+ 4. 修改学生信息 +')
print('+ 5. 退出 +')
print('+ +')
print('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')
operate = input('请选择操作:')
if operate == '1':
add_student()
elif operate == '2':
find_page()
elif operate == '3':
del_page()
elif operate == '4':
revise_page()
elif operate == '5':
quit()
# 添加页面
def add_page():
print('\n1. 继续添加学生')
print('2. 返回系统主页')
print('3. 退出')
operate = input('请输入操作:')
if operate == '1':
add_student()
elif operate == '2':
main_page()
elif operate == '3':
quit()
# 查找页面
def find_page():
print('1. 查找全部学生')
print('2. 按姓名查找学生')
print('3. 按学号查找学生')
print('4. 返回系统主页')
operate = input('请输入操作:')
if operate == '1':
find_all_student()
elif operate == '2':
find_name_student()
elif operate == '3':
find_id_student()
elif operate == '4':
main_page()
# 查找返回页面
def find_return_page():
print('\n1. 返回上一层')
print('2. 返回系统主页')
print('3. 退出')
operate = input('请输入操作:')
if operate == '1':
find_page()
elif operate == '2':
main_page()
elif operate == '3':
quit()
# 删除页面
def del_page():
print('1. 按姓名删除学生')
print('2. 按学号删除学生')
print('3. 返回系统主页')
operate = input('请输入操作:')
if operate == '1':
del_name_student()
elif operate == '2':
del_id_student()
elif operate == '3':
main_page()
# 删除返回页面
def del_return_page():
print('\n1. 返回上一层')
print('2. 返回系统主页')
print('3. 退出')
operate = input('请输入操作:')
if operate == '1':
del_page()
elif operate == '2':
main_page()
elif operate == '3':
quit()
# 修改页面
def revise_page():
print('1. 按姓名修改学生信息')
print('2. 按学号修改学生信息')
print('3. 返回系统主页')
operate = input('请输入操作:')
if operate == '1':
revise_name_student()
elif operate == '2':
revise_id_student()
elif operate == '3':
main_page()
# 修改返回页面
def revise_return_page():
print('\n1. 返回上一层')
print('2. 返回系统主页')
print('3. 退出')
operate = input('请输入操作:')
if operate == '1':
revise_page()
elif operate == '2':
main_page()
elif operate == '3':
quit()
# 自动生成学号
def produce_student_id():
with open('./files/student_id.json', 'r') as f:
x = json.load(f)
for num in range(x, 1000):
student_id = 'python' + str(num).zfill(3)
with open('./files/student_id.json', 'w') as f:
json.dump(num+1, f)
yield student_id
produce_student_id = produce_student_id()
# 添加学生信息
def add_student():
student_id = next(produce_student_id)
name = input('请输入姓名:')
age = input('请输入年龄:')
tel = input('请输入电话:')
student = {'name': name, 'age': age, 'tel': tel, 'student_id': student_id}
students.append(student)
with open('./files/students.json', 'w') as f:
json.dump(students, f)
print('添加成功!')
add_page()
# 查找全部学生
def find_all_student():
for student in students:
print('姓名:', student['name'], ' 年龄:', student['age'], ' 电话:', student['tel'], ' 学号:', student['student_id'])
find_return_page()
# 按姓名查找学生
def find_name_student():
str1 = input('请输入姓名:')
flag = True
for student in students:
if student['name'] == str1:
flag = False
print('姓名:', student['name'], ' 年龄:', student['age'], ' 电话:', student['tel'], ' 学号:', student['student_id'])
if flag:
print('不存在该学生!')
find_return_page()
# 按学号查找学生
def find_id_student():
str1 = input('请输入学号:')
for student in students:
if student['student_id'] == str1:
print('姓名:', student['name'], ' 年龄:', student['age'], ' 电话:', student['tel'], ' 学号:', student['student_id'])
break
else:
print('不存在该学生!')
find_return_page()
# 按姓名删除学生
def del_name_student():
str1 = input('请输入姓名:')
count = 0
del_list = []
for student in students:
if student['name'] == str1:
count += 1
if count == 0:
print('不存在该学生!')
else:
if count > 1:
for student in students:
if student['name'] == str1:
print(count - 1, '. 姓名:', student['name'], ' 年龄:', student['age'], ' 电话:', student['tel'], ' 学号:',student['student_id'])
del_list.append(student)
count += 1
num = int(input('请输入要删除的学生:'))
index = num - 1
students.remove(del_list[index])
with open('./files/students.json', 'w') as f:
json.dump(students, f)
print('删除成功!')
else:
for student in students:
if student['name'] == str1:
students.remove(student)
with open('./files/students.json', 'w') as f:
json.dump(students, f)
print('删除成功!')
break
del_return_page()
# 按学号删除学生
def del_id_student():
str1 = input('请输入学号:')
for student in students:
if student['student_id'] == str1:
students.remove(student)
with open('./files/students.json', 'w') as f:
json.dump(students, f)
print('删除成功!')
break
else:
print('不存在该学生!')
del_return_page()
# 按姓名修改学生信息
def revise_name_student():
str1 = input('请输入姓名:')
count = 0
revise_list = []
for student in students:
if student['name'] == str1:
count += 1
if count == 0:
print('不存在该学生!')
else:
if count > 1:
for student in students:
if student['name'] == str1:
print(count - 1, '. 姓名:', student['name'], ' 年龄:', student['age'], ' 电话:', student['tel'],
' 学号:', student['student_id'])
revise_list.append(student)
count += 1
num = int(input('请输入要修改的学生:'))
name = input('修改姓名:')
age = int(input('修改年龄:'))
tel = int(input('修改电话:'))
index = num - 1
student_id = revise_list[index]['student_id']
for student in students:
if student['student_id'] == student_id:
student['name'] = name
student['age'] = age
student['tel'] = tel
with open('./files/students.json', 'w') as f:
json.dump(students, f)
print('修改成功!')
break
else:
for student in students:
if student['name'] == str1:
print('姓名:', student['name'], ' 年龄:', student['age'], ' 电话:', student['tel'], ' 学号:', student['student_id'])
name = input('修改姓名:')
age = int(input('修改年龄:'))
tel = int(input('修改电话:'))
for student in students:
if student['name'] == str1:
student['name'] = name
student['age'] = age
student['tel'] = tel
with open('./files/students.json', 'w') as f:
json.dump(students, f)
print('修改成功!')
break
revise_return_page()
# 按学号修改学生信息
def revise_id_student():
str1 = input('请输入学号:')
for student in students:
if student['student_id'] == str1:
print('姓名:', student['name'], ' 年龄:', student['age'], ' 电话:', student['tel'], ' 学号:',student['student_id'])
name = input('修改姓名:')
age = int(input('修改年龄:'))
tel = int(input('修改电话:'))
student['name'] = name
student['age'] = age
student['tel'] = tel
with open('./files/students.json', 'w') as f:
json.dump(students, f)
print('修改成功!')
break
else:
print('不存在该学生!')
revise_return_page()
system_page()
网友评论