1. 文件保存
1.1 计算机数据存储
计算机内存分为运行内存和硬盘两种:保存在运行内存中的数据在程序运行结束后会自动释放,保存在影片中的数据会一直存在(除非手动删除或者硬盘损坏)
1.2 数据持久化
数据持久化又叫数据本地化,指的就是程序中的数据保存在硬盘中(程序中的数据默认是保存在运行内存中的)
硬盘保存数据的基本单位是文件,所有如果想要把数据保存到硬盘中,就是需要将数据保存到文件中
常见的数据持久化:数据库(.db、.sqlite)、excel文件、csv文件、txt文件、json文件、plist文件
1.3 文件操作
文件操作基本步骤:打开文件 -> 操作文件内容(读操作、写操作) -> 关闭文件
-
打开文件
open
(文件路径, 文件打开方式=‘r’,encoding
=文本文件编码方式)-
文件路径 - 文件在计算机中的位置信息
文件路径分为两种:绝对路径和相对路径
-
绝对路径:文件在计算机中的全路径
-
相对路径:
注意:使用相对路径之前需要先将被操作的文件放在过程目录中
a. 在写路径的时候用 . 表示当前目录(当前目录指的是当前写代码的文件的所在的文件夹)
b. 在写路径的时候用 … 表示当前目录的上层目录
注意:路径是以’.‘开头的时候’.'可以省略
-
-
文件打开方式
文件打开方式决定了打开文件后能做什么(是能读还是能写);还决定操作文件的时候数据的类型(是字符串还是二进制)
第一组值:r、w、a
r - 只读,如果文件不存在会直接报错
w - 只写,打开的时候会先清空原文件
a - 只写,打开的时候不会清空原文件
第二组知:t, b
t - 字符串类型(读到的数据和写入文件中的数据必须是字符串)
b - 二进制类型(bytes;读到的数据和写入文件中的数据必须是二进制)
给打开方式赋值的时候必须在两组值中每一组选一个值,如果第二组不选默认选择t
rt(tr、t)、rb(br)、at(ta、a)、ab(ba)、wt(tw、w)、wb(bw)
-
文本文件编码方式
不同的文本文件编码方式在保存同一个符号的编码值的时候采用的字节数不同
常见的文本文件编码方式:utf-8、GBK
utf-8:数字和字母采用一个字节来保存;中文用三个字节
GBK:数字和字母采用一个字节来保存;中文用两个字节
使用编码方式的要求:前后一致(存储数据的时候采用编码值必须和获取数据的时候采用编码值一致)
-
# 使用绝对路径
open(r'F:\千锋\就业班代码\day14-文件操作\file\data1.txt')
# 使用相对路径
open(r'.\file\data1.txt')
open(r'..\day14-文件操作\file\data1.txt')
# r是只读
f = open(R'file\data1.txt', 'r')
f.read()
f.write('abc')
# a是只写,并且不会清空原文件
f = open(R'file\data1.txt', 'a')
# f.read() # 报错
f.write('abc')
# w是只写,并且会清空原文件
f = open(r'file\data1.txt', 'w')
# f.read() # 报错
f.write('def')
# r打开不存在的文件程序报错
f = open(r'file\data2.txt', 'r')
# w 和 a 打开不存在的文件的时候不会报错,并且会自动创建这个文件
f = open(r'file\data2.txt', 'w')
f = open(r'file\data2.txt', 'a')
# t - 数据的类型是字符串
f = open(r'file\data1.txt', 'rt')
result = f.read()
print(type(result))
f = open(r'file\data1.txt', 'at')
f.write('hello world!')
# 补充:常见计算机内存单位
'''
位(bit)
1字节(bytes) = 8位
1kb = 1024字节
1mb = 1024kb
1G = 1024mb
1T = 1024G
'''
# f = open(r'file\data2.txt', 'w', encoding='gbk')
# f.write('hello 世界')
# f = open(r'file\data2.txt', 'r', encoding='utf-8')
# print(f.read())
-
操作文件
-
文件读操作(获取文件内容)
a. 文件对象.
read
() - 获取这个文件内容(从读写位置开始获取到文件结束,读写位置默认文件开头)b. 文件对象.
readline
() - 获取这个文件当前行 -
文件写操作(包括增加内容、修改内容、删除内容)
文件对象.
write
(内容) - 将指定内容写入到指定文件中 -
关闭文件
文件对象.
close
()
-
f = open(r'file\data1.txt', encoding='utf-8')
result = f.read()
print(result)
print()
f.seek(0)
result = f.read()
print(result)
print()
f.seek(0)
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline()) # ''
# 一行一行的读取,读完为止
def get_file():
f = open(r'file\data2.txt', encoding='utf-8')
while True:
result = f.readline()
if result == '':
break
yield result
reader = get_file()
print(next(reader))
print(next(reader))
print(next(reader))
f = open(r'file\data3.txt', 'a', encoding='utf-8')
f.write('不知天上宫阙,今夕是何年')
f.close()
# f.write('咕咕咕') # 报错
2. 数据持久化的应用
2.1 数据持久化方法
让这次运行程序产生的数据可以在下一次运行程序的时候使用
第一步:确定需要持久化的数据
第二步:创建文件,并且确定文件初始内容
第三步:做到在程序中需要这个数据的时候从文件获取这个数据
第四步:做到这个数据如果发生改变,必须将最新的数据更新到文件中
# 案例1:写程序打印程序运行次数
# 获取上一次的运行次数
f = open(r'file\运行次数.txt', encoding='utf-8')
count = int(f.read())
# 再让上一次的运行次数加1
count += 1
# 打印次数
print(count)
# 更新文件内容
f = open(r'file\运行次数.txt', 'w', encoding='utf-8')
f.write(str(count))
f.close()
# 练习1:输入姓名,输一行换一行
def input_name():
f = open(r'file\name.txt', 'a', encoding='utf-8')
name = input('请输入需要添加的姓名:')
f.write(name)
f.write('\n')
f.close()
f = open(r'file\name.txt', encoding='utf-8')
print(f.read())
f.close()
name = input('姓名:')
gender = input('性别:')
age = input('年龄:')
try:
f = open(r'file\学生信息.txt', encoding='utf-8')
all_student = eval(f.read())
f.close()
except FileNotFoundError:
all_student = []
all_student.append({'name': name, 'gender': gender, 'age': age})
print(all_student)
f = open(r'file\学生信息.txt', 'w', encoding='utf-8')
f.write(str(all_student))
f.close()