1.生成式
生成式本质还是生成器,只是写法更简洁
'''
1) 生成式的写法
写法1:
(表达式 for 变量 in 序列)
展开
def func():
for 变量 in 序列:
yield 表达式
func()说明:
() --- 固定写法
表达式 --- 任何语句(除赋值语句),一般是 数据、赋值过的变量、运算表达式、函数调用表达式等等
这个表达式一般都和后面的变量有联系
写法2:
(表达式 for 变量 in 序列 if 条件语句)
2)展开
def func():
for 变量 in 序列:
if 条件语句:
yield 表达式
gen = func()
- 补充:python 的三目运算符
c语言: 条件语句?值1:值;2 --- 如果条件语句为真,表达式结果为值1,否则为值2
python语言: 值1 if 条件语句 else 值2
gen1 = (10*x for x in range(5))
print(next(gen1))
print(next(gen1))
print(next(gen1))
print(next(gen1))
print(next(gen1))
用一句话实现交换一个字典中的key和value(面试题)
dict1 = {'a': 1, 'b': 2, 'c': 3}
new_dict = dict((value,key) for key,value in dict1.items())
def dict1(seq):
dict2 = {}
for item in seq:
list1 = list(item)
dict2[list1[0]] = list1[1]
return dict2
gen = dict1([])
1. 数据持久化
程序中产生的数据默认是保存在内存中,程序结束数据会自动销毁。
如果希望程序结束后,数据不销毁,那么久需要对这个数据做数据持久化。
将数据保存到文件中,再将文件保存在硬盘中。
2. 文件操作(对文件内容进行操作)
基本步骤:打开文件 -- 操作文件(读/写) -- 关闭文件
'''
1) 打开文件
open(file,mode='r',encoding=None) -- 以指定的方式打开文件,并且返回文件对象
说明:
file : 文件路径,可以写绝对路径也可以写相对路径
绝对路径(一般不用):完整路径 -- E:\pycharm\text\text.txt
相对路径(需要先将文件保存在工程目录下) -- ./text.txt
./ --- 代表当前目录(指的是当前代码文件所在的目录)可以省略
../ --- 代表当前目录的上层目录 -- ../text.txt
.../ --- 代表当前目录上层目录的上层目录
mode : 字符串,文件的打开方式(决定打开文件后能够进行的操作,和操作方式)
'r' --- 以只读的方式打开文件,读出来的数据是str字符串
'w' --- 以写的方式打开文件,写入的数据是字符串(覆盖源文件内容)
'rb'/'br' --- 以读的方式打开文件,读出来是二进制
'wb'/'bw' --- 以写的方式打开文件,写入的数据是二进制
'a' --- 以写的方式打开文件,写入的数据是字符串(在原文件的最后添加内容)
注意:如果是读的方式打开文件,文件不存在会报错
如果是写的方式打开文件,文件不存在会新建文件
encoding : 字符,文本编码方式
'utf-8' (mac) 支持中文
'gbk'(Windows) 只支持英文
注意: 只有文本文件才能设置encoding,二进制操作都不能设置
'''
f保存文件对象,只有打开文件才能得到文件对象
f = open('./text.txt','r',encoding='utf-8')
2) 操作文件
'''
1.读操作 : 文件对象.read() --- 返回文件中的内容
文件对象.readline() --- 读一行内容(从读写位置开始到一行结尾)
'''
a = f.read()
print(a)
设置读写位置在文件开头
f = open('./text.txt','r',encoding='utf-8')
print(f.seek(0))
f = open('./text.txt','r',encoding='utf-8')
print(f.readline())
读不到内容的时候返回的是空串
练习: 读一个本地的txt文件中的内容,一行一行的读 读完为止
print('=================================')
f = open('./text.txt','r',encoding='utf-8')
while True:
content = f.readline()
print(content)
if not content:
break
'''
2.写操作: 文件对象.write(内容) --- 将内容写入指定文件
'w'/'a'1) 内容要求是字符串类型
'wb'/'bw' 内容要求是二进制bytes
'''
f2 = open('./text.txt','a',encoding='utf-8')
f2.write('你好明天22222')
'''
补充:
二进制对应的类型(bytes)
1) 数据来源:a. 将其他类型转换成bytes类型: bytes(int,bool) bytes(str,encordint='utf-8')
整型和字符串都可以转换成bytes
将bytes转字符串 str = str(bytes,encoding='utf-8')
str = bytes.decode(,encoding='utf-8')
b. 以'rb'或者'br'的方式读文件
'''
3.二进制文件读写
图片 视频 音频 等都是二进制文件。这些文件只能以带'b'的方式打开然后操作
image_f = open('lujing','rb')
image_data = image_f.read()
print(image_data)
response = requests.get('链接')
关闭文件
f.close()
1. 打开文件
'''
with open() as 文件对象:
文件的操作
'''
2. 数据持久化
练习:统计程序启动次数
'''
0.先将这个数据保存在对应的本地文件(创建本地文件)
1.程序中需要这个数据的时候 从文件中去读这个数据的值
2.这个数据的值发生改变后要将最新的数据更新到本地文件中
'''
with open('text.txt','r', encoding='utf-8') as num:
count = int(num.read())
count += 1
print(count)
with open('text.txt', 'w', encoding='utf-8') as num:
num.write(str(count))
import json
1.什么是json数据
json是数据格式中的一种
满足json格式要求的数据, 就是json数据
文件内容满足json格式要求, 就是json文件
"""
json格式要求:
1) json格式要求:a. 一个json中有且只有一个数据
b. 这个数据必须是json支持的数据类型的数据
2) json支持的数据类型:
数字类型(number) --- 所有的数字(整数和小数、科学计数法)
字符串(string) --- 必须是" " 双引号引起来的字符集,支持转移字符
布尔(boolean) --- 只有true和false两个值,在json中首字母小写
数组(array) --- 相当于python中的列表,[]
字典(dictionary)--- 相当于python中的字典, {} 在json中的字典,key必须是字符串
null --- 相当于None 空值
"""
2. python数据和json数据的相互转换
python中内置了一个json模块,用来支持json相关操作
"""
- json 转 python
json -------(转)-------- python
数字 int/float
字符串 str,有可能将双引号变成单引号
布尔 bool,true -> True ; false -> False
数组 list
字典 dict
null None
2)
json.loads(字符串,encoding='utf-8') --- 将json字符串转python对应的数据
注意:这个字符串要求 : 字符串中的内容必须是json格式数据(去掉字符串最外面的引号,本身就是一个json数据)
a = json.loads('"abc"',encoding='utf-8')
print(a)
a = json.loads('true',encoding='utf-8')
print(a)
a = json.loads('{"x": 1,"b": 2}',encoding='utf-8')
print(a)
python 转 json
python --------转------- json
int/float shuzi
bool bool(首字母变成小写)
str ste(变成双引号)
list/tuple 数组
dict 字典
None null
json.dumps(数据) --- 将python数据转换成json格式的字符串
result = json.dumps(100)
print([result])
result = json.dumps('bd')
print([result])
result = json.dumps([1,4,5,6])
print([result])
result = json.dumps({'213': 1,'name': '王'})
print([result])
with open('text.txt') as f:
content = f.read()
dict1 = json.loads(content)
print(dict1[age])