1.文件操作
1.数据持久化
"""
计算机内存分为两种:运行内存、硬盘(磁盘)
保存在运行内存中的数据在程序运行结束后会自动销毁;保存在硬盘中的数据除非人为删除或者磁盘损坏否则会一直存在
程序中数据默认是保存在运行内存中的。
数据持久化就是将数据以文件的形式保存到硬盘中。(保存到硬盘中的数据才能做到,这次运行程序产生的数据在下一次运行程序的时候还能用)
"""
2.文件操作 - 打开文件后操作文件中的内容
"""
文件操作基本流程:打开文件 -> 操作文件(读操作和写操作) -> 关闭文件
"""
"""
open(file, mode='r', *, encoding=None) - 以指定的方式打开指定的文件
1.file - 需要打开的文件路径(文件地址)
1)绝对路径 - 文件在计算机中的全路径(windows电脑从盘名开始写)
2)相对路径 - a.写路径的时候用.开头表示当前目录(文件夹)(当前目录指的是当前写代码的文件所在文件夹)
b.写路径的时候用..开头表示当前目录的上层目录
2.mode - 文件打开方式:
作用:a.决定打开文件后是能读还是能写
b.决定操作文件的时候数据的类型是字符串还是二进制
两个作用对应有两组值:
1)第一组:决定打开后是读还是写
r - 只读;如果文件不存在会报错
w - 只写;打开文件的时候会先清空原文件;如果文件不存在不会报错,并且会自动创建文件;
a - 只写;打开文件的时候不会清空原文件;如果文件不存在不会报错,并且会自动创建文件;
2)第二组:决定操作文件的时候数据的类型(str、bytes)
t(默认值) - 字符串类型(操作文件的时候涉及到的数据必须是字符串) - 打开文本文件
b - 二进制类型(bytes) - 二进制文件(图片、视频、音频、pdf)只能用b
注意:给mode赋值的时候必须在两组中每一组选择一个值
'rt'、'tr'、'br'、'rb', 'r'
'wt'、'wb'、'tw'、'wt', w'
.....
3.encoding - 文本编码方式(只有以t的方式打开文件的时候才会考虑给encoding赋值)
不同的文本编码方式决定字符编码在保存的时候采用的字节数(大小)
1)常用的文本编码方式:
gbk:英文符号单字节、中文符号双字节(超过两个字节的符号会乱码)
utf-8:英文符号单字节、中文符号三字节
2)使用原则:
不同的时候操作同一个文件采用的编码方式必须一样(不一致可能会乱码也可能直接报错)
补充:计算机内存单位
8位(B) = 1字节
1KB = 1024字节
1MB = 1024KB
1G = 1024MB
1T = 1024G
"""
open(r'D:\千锋学习-就业班\自己的代码\01语言基础\day13-文件操作\files\data.txt')
open('./files/data.txt')
open('files/data.txt')
open('./demo.py')
open('../day13-文件操作/files/data.txt')
f = open('files/data.txt', 'rt')
result = f.read()
print(type(result))
f = open('files/data.txt', 'at')
f.write('ok')
f = open('files/data.txt', 'rb')
result = f.read()
print(type(result))
f = open('files/data.txt', 'ab')
f.write(bytes('abc',encoding='utf-8'))
"""
1)文件读操作
文件对象.read() - 从读写位置开始,读到文件结尾(读写位置默认在文件的开头)
文件对象.readline() - 从读写位置开始,读到一行结束
2)文件写操作
文件对象.write(数据) - 将指定数据写入指定文件中
"""
f = open('files/test1.txt','rt',encoding='utf-8')
result = f.read()
print(result)
print('----------------------------------分割线----------------------------------------------')
f.seek(0)
result = f.read()
print(result)
print('-----------------------------------分割线---------------------------------------------')
f.seek(0)
while True:
result = f.readline()
if result == '':
break
print(result, end='')
print(end='\n')
print('----------------------------------分割线----------------------------------------------')
f2 = open('files/data6.txt','wt', encoding='utf-8')
f2.write('hello world!')
f2.write(str([10, 20, 30, 40, 50]))
f2.close()
with open('files/data.txt','r', encoding='utf-8') as f:
print(f.read())
2.数据持久化
1.对程序中的数据做持久化的步骤
"""
第一步:确定持久化对象(到底哪些数据需要持久化)
第二步:创建文件并且确定文件初始内容
第三步:在程序中需要这数据的时候从文件中读数据
第四步:在数据发生改变以后需要将最新的数据写入到文件中
"""
"""
第1次运行:
请输入学生姓名:小明
小明
第2次运行:
请输入学生姓名:小花
小明 小花
...
"""
"""
第1次运行:
请输入学生姓名:小明
请输入学生成绩:89
[{'name': '小明', 'score': 89}]
第2次运行:
请输入学生姓名:小花
请输入学生成绩:100
[{'name': '小明', 'score': 89},{'name': '小花', 'score': 100}]
...
"""
name = input('请输入学生姓名:')
score = input('请输入学生成绩:')
students = {'name': name, 'score': score}
f = open('files/student.txt','at', encoding='utf-8')
f.write(str(students) + ',')
f.close()
f1 = open('files/student.txt', 'r', encoding='utf-8')
list1 = list(eval(f1.read()))
print(list1)
f1.close()
name = input('请输入学生姓名:')
score = input('请输入学生成绩:')
f = open('files/student.txt', encoding='utf-8')
all_student = eval(f.read())
f.close()
all_student.append({'name': name, 'score': score})
print(all_student)
f = open('files/student.txt', 'w', encoding='utf-8')
f.write(str(all_student))
f.close()