数据持久化
- 常见数据有文本文件、表格文件、pdf等。
- python操作文件
操作文本文件:新建(或重命名) -->打开–>写数据–>保存关闭
表格文件:新建–>打开–>写数据–>保存、关闭、重命名
已有文件的读写可以直接打开读数据然后关闭即可。
一、 文件操作形式
以什么形式操作文件 : 读、写
编程中读写无法同时操作
r: 只读 当文件不存在时报错
w: 只写 当文件不存在时,先创建。文件存在时,先清空。
a: 追加,文件不存在,先创建。文件存在,继续添加内容。
以什么数据类型操作文件。
t: 字符串形式。 (如果选t,可以不写,默认为r)
b: 二进制形式。
一般计算机中存储的数据都是二进制形式存在的(图片、音频、视频等)
二、文件操作形式应该如何使用
从以什么形式操作文件和以什么数据类型操作文件各选其一组合使用。
例如:rt,rb,tr,br等,不写以什么数据类型操作文件时默认为字符串。
三、文件读操作
open(参数一,参数二,参数三,参数四)
- 参数一:文件路径、文件名(字符串形式)
- 参数二:文件操作模式(rt等)(字符串形式)
- 参数三:编码方式,无特殊情况均写为:encoding=‘utf-8’
- 参数四:换行方式,newline=‘’
读操作不需要指定
windows换行方式:\r\n;
\r:将鼠标光标移动到下一行行首。
因此windows会出现空行。
mac: \r;
linux: \n - 文件路径分为:相对路径和绝对路径。
绝对路径:一个文件存放在那个磁盘下的什么文件夹,一般尽量不用绝对路径。
例如:r’D:\user\word\tese.txt’
相对路径:以当前文件为参照物,另一个文件相对于他的位置。
固定语法: . 表示当前目录(可以不写)
… 表示返回上一级
/ 文件夹和文件夹之间以及文件夹和文件之间间隔的符号
# 以文件对象的形式打开已存在文件
file = open(r'test.txt','r',encoding='utf-8')
# 读操作:read,readline,readlines
# read:全部读取,结果为字符串
# readline:读取一行
# readlines:读取全部行,结果为列表,每一行是列表中的每个元素
# 每次读取某一行后再读取为下一行,全部读完后在此读取为空行
result = file.read()
print(result)
file.close()
# 每次读操作结束之后一定要执行关闭文件操作。
四、文件写操作(读写操作编码方式需要一致否则会报错)
file =open(r'故事.txt','w',encoding='utf-8',neweline='')
# write:向文件写入内容
str1 = '静夜思\n唐 李白\n床前明月光\n疑是地上霜'
file.write(str1)
file.close()
file =open('故事.txt','w',encoding='utf-8',newline='')
str2 = '\n举头望明月\n低头思故乡'
file.write(str2)
file.close()
# 由于是利用w方式写入,因此每次都会先清空原文件,可利用a方式追加
file =open('故事.txt','r',encoding='utf-8')
print(file.read())
file.close()
with的用法
预定义的清理操作:with
只要推出了with的缩进,直接执行清理操作,自动将文件关闭。
with open('故事.txt','r',encoding='utf-8') as file:
result = file.read
print(result)
print(file.read()) # 不在with缩进,文件已关闭,读操作会出错。
eval方法
eval:将字符串序列化
eval中必须写长度非0的字符串
将引号中的数据转换为原本数据类型。
如果引号内还是一串字符串,且未被赋值,则会操作。
with open('evaltest.txt','w',encoding='utf-8',newline='') as file :
file.write(1) # 会报错,write里面只能写入字符串。
五、图片、视频的读写操作
file = open('1.jpg','rb')
result = file.read()
file.close()
print(result)
# 读取图片二进制编码
# b'xxxx'二进制字节码
# 这里的写入方式就需要带上b,表示二进制写入。
# 否则默认为字符串方式写入。
file = open('2.jpg','wb')
file.write(result)
file.close()
六、csv文件操作
csv文件中的数据以表格形式展示,但是其中的原理是以文本文件的原理。
利用程序创建csv文件
import csv
csvfile = open('学生成绩.csv','w',encoding='utf-8')
# 先写列名,
csv.writer(csvfile).writerow(['编号','姓名','年龄','专业'])
# writerow() --单行写入,wirterow中传递一个列表,列表表示一行,列表中的一个元素代表一个单元格的内容。
csv.writer(csvfile).writerows([
['python001','lisa','18','math'],
['python002','jack','19','history'],
['python003','ben','20','english']
])
# wrierows() --多行写入,也是传入一个列表,列表中元素数量代表写入行数。其中的每个元素就是表示一行内容的小列表。
csvfile.close()
# csv文件的读操作
file = open('学生成绩.csv','r',encoding='utf-8')
# csv.reader得到一个可迭代对象
data = csv.reader(file)
for i in data :
print(i)
file.close()
根据酒店评分数据,加入平均分评分标准。
import csv
file = open('G:\数据库ppt\北京高档酒店价格分析.csv', 'r', encoding='utf-8',newline='')
data = csv.reader(file)
data1= [i for i in data]
list0 = ['平均评分']
for i in data1:
if i[3]!='卫生评分' :
avg = (eval(i[3] )+eval(i[4] ) + eval(i[5] )+ eval(i[6] )) / 4
list0.append(avg)
file.close()
file = open('北京高档酒店价格分析2.csv', 'w', encoding='utf-8',newline='')
for i in range(len(data1)):
data1[i].append(list0[i])
print(data1[i])
csv.writer(file).writerows(data1)
file.close()
补充
时空复杂度(时间复杂度和空间复杂度)
- 时间复杂度: 程序执行时花费时间
- 空间复杂度:程序执行时花费的内存
- 时间复杂度和空间复杂度是相互平衡的