一、文件操作
数据的存储
'''
1.1 数据存储的特点:
计算机中的内存分为硬盘和运行内存:
硬盘:是用来存储文件的,除非手动删除或者硬盘出问题,否则存储在硬盘中的文件会一直存在;
运行内存:是用来存储程序运行过程中产生的数据,当程序结束后会自动销毁
如果希望程序中产生的数据在运行结束后不销毁,就需要将数据存到硬盘中(需要存在文件中)
1.2 常用的文件
txt文件、json文件 、plist文件、数据库文件等 --文本数据
图片文件(png,jpg)、音频文件(MP3、wav)、视频文件... --二进制文件
'''
#2.文件操作 --操作文件内的内容
'''
文件操作基本步骤
1)打开文件
2)操作文件(读、写)
3)关闭文件(close)
'''
#2.1 打开文件
'''
open(file,mode='r',...,encoding=None)
open(文件路径,打开方式,文本编码方式) --以指定方式打开指定文件并且返回指定文件对象
说明:
file: 文件路径;可以是文件的绝对路径和相对路径
绝对路径:文件在计算机中的全路径
相对路径:用./ -表示当前目录
../ -表示上层目录
.../ -表示上上层目录
mode - 文件打开方式,决定打开文件后的操作权限(能读还是能写 - r/w);
操作的文件的类型(文本/二进制 - t/b)
r - 只读 w - 只写 a - 只写
t - 文本数据 b - 二进制数据
r(单独r相当于rt或者tr) - 打开文件后只能进行读操作,读出来的数据是字符串
rb/br - 打开文件后只能进行读操作,读出来的数据是二进制数据(bytes)
w(wt/tw) - 打开文件后只能进行写操作,写入的数据是字符串;打开的时候先清空源文件
wb/bw - 打开文件后只能进行写操作,写入的数据是二进制文件,打开的时候先清空源文件
a(at/ta) - 打开文件后只能进行写操作,写入的数据是字符串,打开的时候不会清空源文件
ab/ba - 打开文件后只能进行写操作,写入的数据是二进制文件,打开的时候不会清空源文件
注意:a、w在打开文件的时候,如果文件不存在,会自动创建文件
r在打开文件的时候,如果文件不存在,会报错
encoding - 文本文件编码方式;只能以t的方式打开文本文件时可以赋值
一般采用utf-8的方式进行编码,保证统一个文件读和写的编码方式一致
'''
#绝对路径
open(r'D:\python工程\语言基础\day13_文件操作和异常处理\file\test.txt')
#相对路径
open('../file/test.txt')
#2.2操作文件
'''
1)读操作
文件对象.read() - 读指定文件,并返回文件中的内容(支持所有文件)
文件对象.readline() - 读指定文件一行的内容(只支持文本文件)
2)写操作
文件对象.write(内容) - 将指定内容写入到指定文件中
'''
f = open('../file/test.txt', 'r', encoding='utf-8')
content = f.read()
print(content)
f.close()
f = open('../file/test.txt', 'r', encoding='utf-8')
for x in range(4):
print(f.readline())
f = open('../file/test.txt', 'w', encoding='utf-8')
f.write('123456')
f = open('../file/test.txt', 'a', encoding='utf-8')
f.write('123456')
数据持久化
1.数据持久化
1.1 需要持久化的数据要保存在文件中
1.2 需要数据的时候,不是在程序中直接给初始值,而是在本地文件中读数据
1.3 如果这个数据的值发生改变,要将最新的数据更新到文件中
练习:在程序中用一个变量来记录当前程序启动的次数
f = open('../file/count.txt', 'r', encoding='utf-8')
content = int(f.read())
content += 1
f.close()
f = open('../file/count.txt', 'w', encoding='utf-8')
f.write(str(content))
print('文件当前执行次数:', content)
f.close()
2.文件域
'''
打开指定文件,在文件作用域结束后会自动关闭文件
with open(文件路径,打开方式,编码方式) as 文件对象:
文件作用域
with open('../file/test.txt', 'r', encoding='utf-8') as f1:
re = f1.read()
print(re)
练习:每次运行程序添加一个学生,要求之前添加的学生要一直存在
list1 = ['张三', '李四', '小明']
for x in range(len(list1)):
with open('../file/a.txt', 'a', encoding='utf-8') as f:
f.write(list1[x])
with open('../file/a.txt', 'r', encoding='utf-8') as f:
re = f.read()
print(re)
#eval(序列) 将对应序列的字符串转换成对应的序列
str1 = '[1, 2, 3]'
r1 = eval(str1)
print(r1)
json数据
1.什么是json
json是一种数据格式:1.一个json只有一个数据,这个数据必须是json支持的数据类型的数据
json支持的数据类型: 1.数字类型(number) - 所有的数字,支持科学计数法,直接 写
2.字符串 - 文本数据,只能使用双引号引起来,支持转义 字符
3.布尔 - 只有true和false两个值
4.空值 - null
5.数组 - 和列表一样,其中元素可以数json支持的任何 数据
6.字典 - 和python中的字典一样,key必须是字符串
2.json转python
'''
json python
数字 int/float
字符串 字符串:双引号变成单引号
布尔 布尔:true->True;false ->False
null None
数组 列表
字典 字典
'''
3.json转python方法
'''
json.loads(字符串) - 将json格式的字符串转换成python对应的数据
注意:要求这个字符串的内容必须是json格式的数据
'''
result = json.loads('100')
print(result)
result = json.loads('"abc"')
print(result)
result = json.loads('[true, null, "hello"]')
print(result)
result = json.loads('{"10": 100, "name": "Tom"}')
print(result)
4.python转json规律
'''
转换规律:
python json
int/float 数字
字符串 字符串:单引号会变成双引号
布尔 True ->true;False ->false
None null
列表/元组 数组
字典 字典
'''
5.python转json方法
'''
json.dumps(数据) - 将python数据转换成json格式的字符串
'''
result = json.dumps(100)
print(result)
result = json.dumps('abc')
print(result)
result = json.dumps([True, None, 'hello'])
print(result)
result = json.dumps((10, 'abc', False))
print(result)
result = json.dumps({10: 100, 'name': 'Tom'})
print(result)