文件操作
1.数据持久化(数据本地化)
计算机内存分为硬盘和运行内存。当运行程序的时候系统会自动在裕兴内存中开辟空间保存程序隐形过程中
产生的数据;但是当程序运行的结束的时候,这个内存空间会自动销毁,所以数据也会销毁。
如果希望数据一直存在,需要将数据储存在硬盘中。
存储到本地文件的数据,就是存储在硬盘中的数据,就能持久化
txt文件、二进制文件(图片、视频、音频、压缩文件)、json文件、plist文件、数据库文件(.db,.sql
2.文件操作 - 文件内容的操作
基本步骤:打开文件 - 读/写 - 关闭
1)打开文件
open(file,model = 'r', encoding = None) - 打开指定文件,返回文件对象
file - 字符串,需要打开的文件的路径,可以是绝对路径,也可以是相对路径
绝对路径:文件在电脑中的全路径(一般很少使用)
相对路径:./斜杆(当前目录-当前py文件所在的目录),可以省略
../(当前目录的上层目录)
.../(当前目录的上层目录的上层目录)
model - 字符串,文件打开方式;打开方式决定了打开文件后支持的操作和操作的数据类型
'r':默认值,只读;读出来的数据是字符串类型
'w':只写;只能将字符串写入文件;(先删除原文件的内容再写)
'rb'/'br':只读;读出来的数据是二进制数据(bytes)
'wb'/'bw': 只写;只能将二进制数据写入文件(先删除原文件的内容再写)
'a':只写;只能将字符串写入文件;(保留原文件内容追加)
'ab'/'ba':只写,将二进制写入文件(保留原文件写入)
encoding - 设置文件内容的编码方式。固定写:'utf-8';只针对文本文件有效
注意:只有文本操作才能设置编码方式
文本文件在读和写的时候的编码和解码的方式必须一致
2)操作文件
a.读操作 - 获取文件中的内容,
文件对象.read() - 会返回文件中的内容
文件对象.readline() - 读一行内容(从读写位置读到一行结尾)
3)关闭文件
文件对象.close()
f = open('./file/text.txt', 'r', encoding='utf-8')
content = f.read()
print(type(content))
print(content)
f.seek(0)
print(f.readline())
while True:
content = f.readline()
if not content:
break
print(content)
移动读写位置(移动光标)
文件对象.seek(0) - 将读写位置移到文件开头
f.seek(0)
f.close()
写操作:文件对象.write(写的内容) - 将指定的内容写入文件中
f = open('file/text.txt', 'w', encoding='utf-8')
f.write('abc')
f.close()
练习
数据持久化:a.需要数据的时候去文件读数据 b.数据发生改变后将最新的数据写入文件中
统计当前程序运行的次数
f = open('file/count.txt', 'r', encoding='utf-8')
num = int(f.read())
f.close
num += 1
print(num)
# 每次写入清空文件中的内容
f = open('file/count.txt', 'w', encoding='utf-8')
f.write(str(num))
f.close()
练习:写一
个程序打印账号和余额
存钱和取钱
value = int(input('1.存钱 2.取钱:'))
if value == 1:
in_money = int(input('金额:'))
f = open('file/count1.txt', 'r', encoding='utf-8')
num = int(f.read())
f.close
in_money += num
print(in_money)
f = open('file/count1.txt', 'w', encoding='utf-8')
f.write(str(in_money))
f.close()
二进制文件
1.常见的二进制文件:图片文件、视频文件、音频文件、压缩文件等
不是只有二进制文件才支持'b'操作(rb,wb,ab),但是二进制文件只能采用'b‘操作
注意:所有带'b'的操作不能设置encoding
f = open('file/text.txt', 'rb')
content = f.read()
print(type(content))
f.close()
f = open('file/字符串.png', 'rb')
content = f.read()
print(content)
f.close()
f = open('file/new.jpg', 'wb')
f.write(content)
f.close()
下载图片实例
import requests
response = requests.get('https://www.baidu.com/img/bd_logo1.png?where=super')
f = open('file/baidu.png', 'wb')
f.write(response.content)
f.close()
2.文件不存在
如果以读的方式打开一个不存在的文件,程序会报错
如果以写的方式打开一个不存在的文件,不会报错,并且会自动创建这个文件
3.打开文件的简写
1)语法:
with open(文件路径,读写方法, encoding=b编码方式) as 文件对象:
文件域(操作文件)
2)说明:
以这种方式打开文件,在文件域结束后,文件会自动关闭
json数据
1.什么是json数据 - 满足json格式的数据
json格式:a.一个json有且只能有一个数据 b.这个数据必须是json支持的数据类型对应的数据
2)json支持的数据类型
a.数字类型 - 所有的数字,100, 0.23
b.字符串 - 使用双引号引起来的字符集,支持转义字符和编码字符例如:"\u4e00qaz", "123"
c.布尔 - 只有true 和false
d.数组 - 相当于python中的列表,例如:["abc", 100, true, [12,45]]
e.字典 - 相当于python中的字典,key只能是字符串,例如{"q": 100, "c": [12, 34}}
f. null - 相当于python中的None,表示空
2.将json转python
json python
数字类型 int or float
字符串 字符串,双引号可能会变单引号
布尔 bool,true -> True, false -> False
数组 list,["abc", true] -> ['abc', True]
null None
2)方法
loads(字符串) - 将json格式的字符串转换成对应的python数据
注意:字符串的内容必须是json格式的数据
result = json.loads('123')
print(result)
result = json.loads('"abc"')
print(result)
result = json.loads('[123, "abc", false, null]')
print(result)
3.将python转json
1)转换关系
python json
int/float 数字
str 字符串,单引号会变双引号
bool 布尔,True ->true,False -> false
list/tuple 数组
dict 字典
None null
2)方法
dumps(数据) - 将数据格式转换成json格式的字符串
result = json.dumps('abc')
print(type(result), result)
result = json.dumps([10, True, 'abc', [None, 100]])
print(type(result), result)
students = {'name': 'xianmong', 'age': 17}
result = json.dumps(students)
print(type(result),result)