数据持久化知识
数据持久化:将数据从瞬时状态转换为持久状态。
文本文件,表格文件
python 操作文件
操作文本文件:新建(重命名)->打开->写数据->保存关闭
打开->读数据->关闭
表格文件(exce):新建->打开->读数据->保存、关闭、重命名
打开->读数据->关闭
文件操作形式:
a.以什么形式操作文件。 b.以什么形式操作文件
a.以什么形式操作文件:读、写
r:只读,文件不存在,报错。
w:只写,文件不存在,先创建。文件存在,先清空
a:追加,文件不纯在,先创建。文件存在,继续添加内容。
b以什么数据类型操作文件。
t.字符串形式(如果选t, 可以不写,默认为r等于rt、tr)
b:二进制形式。 一般计算机中存储的数据都是以二进制形式存在的(图片、音频、视频)
文件操作形式 应该咋样使用。
从以什么形式操作文件 和 以什么数据类型操作文件 各选其一组合使用。
‘rt’ ,‘rb’,‘br’,‘br’,等
文件的读操作
open(参数1,参数2)
参数1:文件路径、文件名
参数2: 文件操作模式
参数3:编码方式.encoding=‘utf-8’
参数4:换行方式,newline=‘’(读操作不需要指定)
补充:\r将鼠标光标移动到下一行行首。
以文件对象的形式打开以存在文件
file= open(r’text.txt’,‘r’,encoding=‘wtf-8’)
print(file)
读操作:read readline, readlines
read :一次性将文件中内容以字符串形式读出来
result =file.reafd()
print(result,type(result))
readline:每次只读一行,结果为字符串
result=file.read()
print(result,type(result))
readines:一次性将所有行读出来,结果为列表,内行是列表中的每个元素
result1=file.readline()
print(result1)
result5=file.readlines()
print(result5)
关闭文件
file .close()
写操作
import fileinput
file=open(‘古诗.txt’,‘a’,encoding=‘utf-8’,newline=‘’)
…write:向文件写内容
str1=‘静夜思\n李白\n床前明月光\n疑是地上霜\n’
file.write(str1)
file.close()
读操作和写操作时编码要保持一致
file=open(‘古诗.txt’,‘a’,encoding=‘utf-8’,newline=‘’)
…write:向文件写入内容
str1=‘举头望明月\n低头思故乡’
file.write(str1)
file.close()
with的用法
预定义的清理操作:with
只要推出with缩进。直接执行清理操作,文件直接关掉
eval方法
with open(‘eweal测试.txt’,‘w’,encoding=‘utf-8’,newline=‘’)as file:
file.write(‘1\n’)
list1=[1,2,3,4,5]
file.write(f’{list1}')
with open(‘eweal测试.txt’, ‘r’, encoding=‘utf-8’, newline=‘’) as file:
result1=file.readline()
print(result1,type(result1))
print(file.readline())
:eval :将字符串序列化,eval中必须写长度非0的字符串
print(eval(‘1’)+2)
print(‘[1,2,3,4]’[0])
print(eval(‘[1,2,3,4]’)[0])
CSV文件
CSV文件中的数据是以表格形式展示的,但是其中的原理
import csv
csvfile=open(‘学生成绩.csv’,‘w’,encoding=‘utf-8’,newline=‘’)
先写列名
…使用csv米快提供qiter方法近行 文件写操作
myWrite = csv.writer(csvfile)
csv.writer()
myWrite.writerow([‘编号’,‘姓名’,‘年龄’,‘专业’])
…writerow - 单行写入, writerow 中传递一行列表,列表表示一行,列表中的元素代表一个元素代表一个单元格内容
writerows - 多行写入
myWrite.writerows(
[
[‘python001’,‘张三’,‘18’,‘计算机科学与技术’],
[‘python001’,‘张三’,‘18’,‘计算机科学与技术’],
[‘python001’,‘张三’,‘18’,‘计算机科学与技术’]
]
)
writerows() 多行穿入,writerows 中传递一个列表,列表中有几个元素代表几行
其中的每个元素就是代表一行内容的小列表
csvfile.close()
print(‘--------------------------------------------------------’)
file = open(‘学生成绩.csv’,‘r’,encoding=‘utf-8’)
data=csv.reader(file)
for i in data:
print(i)
file.close()
练习 算酒店的平均分
import csv
…读酒店文件
file = open(‘北京高档酒店价格分析.csv’, ‘r’, encoding=‘utf-8’)
data = csv.reader(file)
dataList = [i for i in data]
file.close()
…计算结果并写回文件
file_1 = open(‘北京高档酒店价格分析.csv’, ‘w’, encoding=‘utf-8’, newline=‘’)
myWrite = csv.writer(file_1)
dataList[0].append(‘平均评分’)
myWrite.writerow(dataList[0])
for i in dataList[1:]:
sumScroe = 0
for index in range(3, 7):
#
sumScroe += float(i[index])
AvgScroe = round(sumScroe / 4, 1)
print(i[0], AvgScroe)
i.append(AvgScroe)
myWrite.writerow(i)
file_1.close()
print(‘写入完成’)