day14_Python基础内容—数据持久化、文件操作、数据持久化方法

Python学习第14天。

学习内容:数据持久化、文件操作、数据持久化方法。

一、数据持久化

问题1:什么是数据持久化?为什么要持久化?

计算机存储空间分为:运行内存和磁盘两种。
程序中产生的数据默认都是保存在运行内存中,存储在运行内存中的数据在程序结束后会自动销毁。
如果将数据存储到磁盘中,那么数据除非手动删除或者磁盘损坏,否则会一直存在,实现了数据的持久保存,存储在磁盘中的数据可以反复使用。磁盘存储数据的基本单位是文件。

数据持久化指的就是将程序中的数据以文件的形式保存到磁盘中。

为什么要持久化? 持久化技术封装了数据访问细节,为大部分业务逻辑提供面向对象的应用程序接口(Application Programming Interface,API)。1.通过持久化技术可以减少访问数据库数据次数,提高程序的执行效率; 2.代码重用性高,能够完成大部分数据库操作; 3.松散耦合,使持久化不依赖于底层数据库和上层业务逻辑实现,更换数据库时只需修改配置文件而不用修改代码。

问题2:常见的数据持久化工具有哪些?

 常见数据持久化工具:
 数据库(.db、.sqlite)、json文件(.json)、xml文件(.xml)、plist文件(.plist)、普通文本文件(.txt)、
excel文件(.xls、.xlsx)、csv文件(.csv)。

二、文件操作

问题1:什么是文件?

文件是计算机磁盘存储数据的基本单位。文件操作是基于文件的,文件操作的核心是:读和写。文件的存在实现了将数据持久地保存在磁盘中,可以实现对硬件的操作。

问题2:文件操作的流程是什么?

文件操作就是操作文件内容。文件操作的基本流程为:
打开文件 —> 操作文件(读操作、写操作)—>关闭文件

1.打开文件

open(file, mode='1', *, encoding=None)  — 以指定方式打开指定文件,返回一个文件对象。

(1)参数file  — 字符串,文件路径,用来确定要打开的是哪个文件。文件路径就是文件在计算中具体的完整位置
①绝对路径:文件在计算机中的全路径。
②相对路径:用 . 表示当前目录(当前目录指的是当前代码文件所在的目录)—书写时 ./ 可以省略
用 .. 表示当前目录的上层目录。

注意:使用相对路径的时候必须保证文件在工程中。
# 1)文件路径
open(r'/Users/yuting/lessons/Python2107/01语言基础/day14-文件操作/files/a.txt', encoding='utf-8')           # 绝对路径
open(r'./files/a.txt', encoding='utf-8')             # 相对路径
open(r'./01review.py', encoding='utf-8')        # 相对路径

open('../day14-文件操作/files/a.txt')            # 相对路径
(2)参数mode  —  字符串,文件打开方式;决定打开文件后能做什么(读 or 写),决定操作文件的时候数据的类型(二进制or字符串?) 
第一组值:决定打开文件后能做什么(读or写?)
        r  -   只读
        w  -   只写;打开的时候会清空原文件(覆盖)
        a  -   只写;打开的时候保留原文件内容(追加)
第二组值:决定操作文件的时候数据的类型(二进制or字符串?) 
        t  -  字符串(str)
        b  -  二进制(bytes)
注意:①给mode赋值的时候必须在两组值中每一组选一个,如果第二组不选就相当于选的't'。
     'r' == 'rt' == 'tr'
     'w' ==  'wt' == 'tw'
     'rb' == 'br'
	 ②所有的文件都可以以b的方式打开,但是只有文本文件才能用t打开。
     ③以读的方式打开一个不存在的文件程序会报错。
     ④以写的方式打开一个不存在的文件程序不会报错,并且会自动创建这个文件。
#2) 打开方式
#①. r - 只读
f = open('./files/a.txt', 'r')
f.read()
f.write('MAM')        # io.UnsupportedOperation: not writable

# ②. w - 只写并且清空原文件
f = open('./files/a.txt', 'w')
f.write('ABC')
# f.read()      # io.UnsupportedOperation: not readable

# ③. a - 只写,保留原文件内容
f = open('./files/a.txt', 'a')
f.write('Hello!')
# f.read()      # io.UnsupportedOperation: not readable

# ④. t - 字符串
f = open('./files/a.txt', 'rt')
result = f.read()
print(type(result))     # 

# ⑤. b - 二进制
f = open('./files/a.txt', 'rb')
result = f.read()
print(type(result))     # 
(3)参数encoding	- 文本文件编码方式,使用的时候一般设置成 'utf-8'
注意:a. 一般不需要设置这个值,默认和电脑默认编码方式一致。
     b. 如果是以b的方式打开文件,一定不能给encoding赋值

2.操作文件 —读 or 写

(1)读操作
文件对象.read()	—从读写位置开始读到文件结尾(读写位置默认在文件开头,一次读完)
文件对象.readline()	—从读写位置开始到一行结束(一次读一行,只支持文本文件)

(2)写操作
文件对象.write(数据)	—将指定数据写入文件
# 1)读操作
f = open('files/a.txt', 'r')	# open文件
result = f.read()				# 文件操作
print(result)

f.seek(0)       # 将读写位置移动到文件开头
result = f.read()
print(result)

f.seek(0)		# 将读写位置移动到文件开头
result = f.readline()	# 文件操作
print(result)

result = f.read().split('\n')  # 文件读操作转行分割
print(result)

# 2) 写操作
f = open('./files/a.txt', 'a')
nums = [10, 20, 30, 40]
f.write(str(nums))

3.关闭文件

文件对象.close()
f.close()
# f.write('ahjsgdfja ')       # ValueError: I/O operation on closed file.

def func1():
    f2 = open('files/a.txt')


result = open('files/a.txt').read()
print(type(result))

f = open('files/a.txt')
print(type(f))
result = f.read()
f.close()

三、数据持久化方法

问题1:数据如何持久化?持久化的步骤

第一步:确定需要持久化的数据
第二步:创建合适的文件,并且确定文件的初始内容
第三步:程序中需要这个数据的时候,必须从文件中获取
第四步:当这个数据发生改变以后,必须将最新的数据更新到文件中
# 练习1:写一个程序打印当前程序运行的次数
num = int(open('files/count.txt').read())
num += 1
print(num)

open('files/count.txt', 'w').write(str(num))
# 练习2:每次运行程序输入一个学生的信息,输入完成后打印已经录入的所有学生的姓名
"""
请输入学生姓名: 小明
小明

请输入学生姓名: 小花
小明 小花

请输入学生姓名: 张三
小明 小花 张三
"""
name = input('请输入学生姓名:')
all_names = open('files/students.txt').read()
all_names += name + ' '
print(all_names)
open('files/students.txt', 'a').write(f'{name} ')
# 练习3:每次运行程序输入一个学生的信息,输入完成后打印已经录入的所有学生的姓名
"""
[]
请输入学生姓名: 小明
['小明']

请输入学生姓名: 小花
['小明', '小花']

请输入学生姓名: 张三
['小明', '小花', '张三']
"""
name = input('请输入学生姓名:')
all_names = eval(open('files/students2.txt').read())    # type: list
all_names.append(name)
print(all_names)
open('files/students2.txt', 'w').write(str(all_names))

你可能感兴趣的:(python,数据库,开发语言)