python学习之路三

字符串的格式化 format

format:相当于占位符。
顺序传参、索引传参、关键字传参、容器类型传参(列表和元组)

# 顺序传参
strvar = '{}向{}开了一枪,饮弹而亡'
res = strvar.format('ys','恶魔')
print(res) # ys向恶魔开了一枪,饮弹而亡

# 索引传参
strvar = '{1}向{0}开了一枪,饮弹而亡'
res = strvar.format('ys','恶魔')
print(res) # 恶魔向ys开了一枪,饮弹而亡

# 关键字传参
strvar = '{who1}向{who2}开了一枪,饮弹而亡'
res = strvar.format(who1='ys',who2='恶魔')
print(res) # ys向恶魔开了一枪,饮弹而亡

# 容器类型传参
# 情况一
strvar = '{0[1]}向{1[0]}开了一枪,饮弹而亡'
res = strvar.format(['ys','ymt'],('恶魔','魔鬼'))
print(res) # ymt向恶魔开了一枪,饮弹而亡
# 情况二 format格式化时,要注意如果是字典,不要加引号
strvar = '{0[1]}向{1[b]}开了一枪,饮弹而亡'
res = strvar.format(['ys','ymt'],{'a':'恶魔','b':'魔鬼'})
print(res) # ymt向魔鬼开了一枪,饮弹而亡

关键字 pass / break / continue

# pass 过 起到占位的作用
if 5==5:
  pass
# break 只能应用在循环当中,用于终止当前循环
# 打印1~10 遇到5终止循环
i = 1
while i<=10:
	if i == 5:
		break
	print(i)
	i+=1
# break在第二层循环里
i = 1
while i<=3:
	j = 1
	while j<=3:
		print(i,j)  
		if j == 2:
			break  # 终止当前所在的循环
		j+=1
	i+=1

# continue 跳过当前循环,从下一次循环开始
# 打印1~10 不打印5
i = 1
while i<=10:
	if i == 5:
		i+=1
		continue # 此处有坑		
	print(i)
	i+=1

# 打印1~100 不含有4的数
# 方法一
i = 1
while i<=100:
	if '4' in str(i):
		i+=1
		continue
	print(i)
	i+=1
# 方法二
i = 1
while i<=100:
	if i // 10 == 4 or i % 10 == 4:
		i+=1
		continue		
	print(i)
	i+=1
		

列表的相关操作


列表的拼接

lst1 = [1,2,3]
lst2 = [4,5,6]
res = lst1 + lst2
print(res) # [1, 2, 3, 4, 5, 6]

列表的重复

lst1 = [7,8,9]
res = lst1 * 3
print(res) # [7, 8, 9, 7, 8, 9, 7, 8, 9]

列表的切片

'''
语法 => 列表[::]  完整格式:[开始索引:结束索引:间隔值]
	(1)[开始索引:]  从开始索引截取到列表的最后
	(2)[:结束索引]  从开头截取到结束索引之前(结束索引-1)
	(3)[开始索引:结束索引]  从开始索引截取到结束索引之前(结束索引-1)
	(4)[开始索引:结束索引:间隔值]  从开始索引截取到结束索引之前按照指定的间隔截取列表元素值
	(5)[:]或[::]  截取所有列表
'''
listvar = [1,2,3,4,5,6,7,8,9]
# (1)[开始索引:] 从开始索引截取到列表的最后
res = listvar[1:]
print(res) # [2, 3, 4, 5, 6, 7, 8, 9]

# (2)[:结束索引]  从开头截取到结束索引之前(结束索引-1)
res = listvar[:4] # 高位取不到
print(res) # [1, 2, 3, 4]

# (3)[开始索引:结束索引]
res = listvar[3:7]
print(res) # [4, 5, 6, 7]

# (4)[开始索引:结束索引:间隔值]
# 0 3 6 9 先把数字数出来 通过下标找对应值
res = listvar[::3]
print(res) # [1, 4, 7]
# 3 5 7 9
print(listvar[3::2])  # [4, 6, 8]
# 0 3 6 9
print(listvar[:6:3]) # [1, 4]

# 倒序
print(listvar[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1]
# -2 -4
print(listvar[-2:-6:-2]) # [8, 6]

列表的获取

#          0    1   2
listvar = ["a","b","c"]
#          -3  -2  -1
res = listvar[2]
print(res) # c
res = listvar[-1]
print(res) # c

列表的修改(可切片)

listvar = ['a','b','c','d']
listvar[3] = '123'
print(listvar) # ['a', 'b', 'c', '123']
# 如果使用了切片进行修改,右侧必须是可迭代性数据
listvar[2:] = '123'
print(listvar) # ['a', 'b', '1', '2', '3']
listvar[2:] = range(0,4)
print(listvar) # ['a', 'b', 0, 1, 2, 3]

# 如果使用了切片,并且指定了第三个参数间隔值
# 那么截取几个就放几个,一一对应
listvar = ['a','b','c','d']
listvar[::2] = (1,2)
print(listvar) # [1, 'b', 2, 'd']

列表的删除(可切片)

listvar = ['a','b','c','d']
del listvar[1]
print(listvar) # ['a', 'c', 'd']

# 可以使用切片删除
listvar = ['a','b','c','d']
del listvar[1:3]
print(listvar) # ['a', 'd']

# 元组当中的一级数据更改不了,但是二级或者多级如果是列表这样的数据可修改
tup = (1,2,3,4,5,[1,2,3,45])
tup[-1][-1] = 54
print(tup) # (1,2,3,4,5,[1,2,3,54])

列表的方法

append

# append
'''
功能:向列表的末尾添加新的元素
格式:列表.append(值)
返回值:None
注意:新添加的值在列表的末尾,该函数直接操作原有列表
'''
listvar = [1,2,3,4,5]
listvar.append(6) 
print(listvar) # [1, 2, 3, 4, 5, 6]
listvar.append([12,3])
print(listvar) # [1, 2, 3, 4, 5, [12, 3]]

insert()

'''
功能:在指定索引之前插入元素
格式:列表.insert(索引,值)
返回值:None
注意:直接改变原有列表
'''
listvar = [1,2,3,4,5]
listvar.insert(2,"7")
print(listvar) # [1, 2, '7', 3, 4, 5]

entend()

'''
功能:迭代追加所有元素
格式:列表.extend(可迭代性数据)
返回值:None
注意:直接改变原有列表
'''
listvar = [1,2,3,4,5]
listvar.extend(['1','2'])
# listvar.extend({'a':1,"b":2}) 语法上允许
print(listvar) # [1, 2, 3, 4, 5, '1', '2']

pop

'''
功能:通过指定索引删除元素,若没有索引移除最后那个
格式:列表.pop(索引)
返回值:删除的元素
(注意:没有指定索引,默认移除最后一个元素 )
'''
listvar = [1,2,3,4,5]
res = listvar.pop()
print(res)  # 5
print(listvar) # [1,2,3,4]

res = listvar.pop(3) # 指定索引
# res = listvar.pop(33)  删除不存在的报错

remove()

'''
功能:通过给予的值来删除,如果多个相同元素,默认删除第一个
格式:列表.remove(值)
返回值:无
(注意:如果有索引的情况推荐使用pop,效率高于remove)
'''
listvar = [1,2,3,4,5]
listvar.remove(4)
print(listvar) # [1,2,3,5]

clera()

'''
功能:清空列表
格式:列表.clear()
返回值:空列表
'''
listvar = [1,2,3,4,5]
listvar.clear()
print(listvar) # []

index()

'''
功能:获取某个值在列表中的索引
格式:列表.index(值[,start][,end]) # []  表达参数可选项 
返回值:找到返回索引  (找不到报错)
'''
listvar = [1,2,3,4,54,4,90,4,78,78787,7878]
res = listvar.index(3)  # 2
# res = listvar.index(99) # 如果索引不存在直接报错
res = listvar.index(4,4) # 5
res = listvar.index(4,6,9) # 指定索引的查找范围,高位取不到
print(res)

count()

'''
功能:计算某个元素出现的次数
格式:列表.count(值)
返回值:次数
'''
listvar = [1,2,3,4,54,4,90,4,78,78787,7878]
res= listvar.count(4)
print(res) # 3

sort()

'''
功能:列表排序(默认小到大排序)
格式:列表.sort(reverse=False)                        
返回值:None
注意:直接更改原列表
'''
listvar = [78,12,-3,99]
# 默认从小到大排序 (正序)
listvar.sort()
print(listvar)
# 从大到小排序 用reverse = True (倒叙)
listvar.sort(reverse=True)
print(listvar)

reverse()

'''
功能:列表反转操作
格式:列表.reverse()
返回值:None
注意:直接更改原列表
'''
listvar = [78,12,-3,99]
listvar.reverse()
print(listvar)

深浅拷贝

a = 10
b = a
a = 20
print(b) # 10

listvar = [1,2,3]
lst2 = listvar
listvar.append(6)
print(lst2) # [1, 2, 3, 6]
print(listvar is lst2) # True

# 浅拷贝
# 方法一
listvar = [1,2,3]
lst2 = listvar.copy()
listvar.append(6)
print(lst2) # [1, 2, 3]

# 方法二
import copy
listvar = [1,2,3]
lst = copy.copy(listvar)
listvar.append(6)
print(lst) # [1, 2, 3]

# 深拷贝
import copy
lst = [{'a':{'c':1,'d':3},'b':[5,6,7,8]},4,5]
# 浅拷贝只能拷贝列表的一级
# 如果想要拷贝所有层级,需要使用深拷贝
lst2 = copy.deepcopy(lst)
lst[0]['b'].append(9)
print(lst) # [{'a': {'c': 1, 'd': 3}, 'b': [5, 6, 7, 8, 9]}, 4, 5]
print(lst2) # [{'a': {'c': 1, 'd': 3}, 'b': [5, 6, 7, 8]}, 4, 5]

字典的相关函数


dictvar = {'a':1,'b':2}
dictvar['c'] = 3
print(dictvar) # {'a': 1, 'b': 2, 'c': 3}

# fromkeys() 使用一组键和默认值创建字典(不常用,赋初始值)
listvar = [1,2,3]
res = {}.fromkeys(listvar,None)
print(res) # {1: None, 2: None, 3: None}
res = {}.fromkeys(listvar,[1,2])
print(res) # {1: [1, 2], 2: [1, 2], 3: [1, 2]}
# 1,2,3中的值 是三个不同变量指向同一个空间的地址值

# pop() 通过键去删除键值对(若没有该键可设置默认值,预防报错)
dictvar = {"top":"程咬金","middle":"甄姬","bottom":"鲁班七号"}
res = dictvar.pop("top")
print(res) # 程咬金
print(dictvar) # {'middle': '甄姬', 'bottom': '鲁班七号'}
# pop()可以在第二参数上指定默认值,预防不存在该键时报错
res = dictvar.pop('1111111','该键有吗')
print(res) # 该键有吗

# popiten() 删除最后一个键值对
dictvar = {"top":"程咬金","middle":"甄姬","bottom":"鲁班七号"}
res= dictvar.popitem()
print(res) # ('bottom', '鲁班七号')
print(dictvar) # {'top': '程咬金', 'middle': '甄姬'}

# clear() 清空字典
dictvar = {"top":"程咬金","middle":"甄姬","bottom":"鲁班七号"}
dictvar.clear()
print(dictvar) # {}

# update() 批量更新(有该键就更新,没有就创建并添加)
dictvar = {"top":"程咬金","middle":"甄姬","bottom":"鲁班七号"}
# 写法一 在括号里面写字典数据(一个字典即可)
dictvar.update({'top':111,'jungle':222}) 
print(dictvar) # {'top': 111, 'middle': '甄姬', 'bottom': '鲁班七号', 'jungle': 222}
# 写法二 在括号里写关键字参数
dictvar.update(a=1,b=2,top=3)
print(dictvar) # {'top': 3, 'middle': '甄姬', 'bottom': '鲁班七号', 'a': 1, 'b': 2}

# get() 通过键获取值(若没有该键返回None,也可以设置默认值,预防报错)
dictvar = {"top":"程咬金","middle":"甄姬","bottom":"鲁班七号"}
res = dictvar.get("top123") # None
res = dictvar.get("top123","对不起") # 对不起
res = dictvar['top'] # 程咬金

# keys() 将字典的键组成新的可迭代对象
dictvar = {"top":"程咬金","middle":"甄姬","bottom":"鲁班七号"}
res = dictvar.keys()
print(res)
for i in dictvar.keys():
	print(i)

for i in dictvar:
	print(i)

# values() 将字典中的值组成新的可迭代对象
dictvar = {"top":"程咬金","middle":"甄姬","bottom":"鲁班七号"}
res = dictvar.values()
print(res)
for i in res:	
	print(i)

# items() 将字典的键值对凑成一个个元组,组成新的可迭代对象
res = dictvar.items()
print(res)
for i in res:	
	print(i)
'''
('top', '程咬金')
('middle', '甄姬')
('bottom', '鲁班七号')
'''
for a,b in res:
	print(a,b)

集合


交差并补

在这里插入图片描述

set1 = {"周星驰","周杰伦","周润发","王文"}
set2 = {"王健林","王思聪","王宝强","王文"}

# 交集  intersection()  &
res = set1.intersection(set2)
print(res) # {'王文'}
res = set1 & set2
print(res) # {'王文'}

# 差集 difference()  -
res = set1.difference(set2)
print(res) # {'周杰伦', '周星驰', '周润发'}
res = set2.difference(set1)
print(res) # {'王健林', '王思聪', '王宝强'}
res = set1 - set2
print(res) # {'周杰伦', '周星驰', '周润发'}

# 并集 union()  |
res = set1.union(set2)
print(res) # {'周润发', '王健林', '周星驰', '王宝强', '王文', '王思聪', '周杰伦'}
res = set1 | set2
print(res) # {'周润发', '王健林', '周星驰', '王宝强', '王文', '王思聪', '周杰伦'}

# 对称差集 symmetric_difference()
# 补集情况涵盖在其中
res = set1.symmetric_difference(set2)
print(res) # {'王宝强', '王健林', '周星驰', '王思聪', '周润发', '周杰伦'}
res = set1 ^ ser2
print(res) # {'王宝强', '王健林', '周星驰', '王思聪', '周润发', '周杰伦'}

# issubset() 判断是否是子集(真子集:子集元素一定少于父集,完全被包含在其中)
set_father = {"周星驰","周杰伦","周润发","王文"}
set_son  = {"周杰伦","周润发"}
res = set_son.issubset(set_father)
print(res) # True
res = set_son < set_father
print(res) # True

# 这个情况下,两个集合完全一样,分不清子父关系,不是真子集
set_father = {"周星驰","周杰伦","周润发","王文"}
set_son  = {"周星驰","周杰伦","周润发","王文"}
res = set_son <=  set_father
print(res)  # True

# issuperset() 判断是否是父集
set_father = {"周星驰","周杰伦","周润发","王文"}
set_son  = {"周星驰","周杰伦"}
res = set_father.issuperset(set_son)
print(res)  # True
res = set_father > set_son
print(res)  # True


set_father = {"周星驰","周杰伦","周润发","王文"}
set_son  = {"周星驰","周杰伦","周润发","王文"}
res = set_father >= set_son
print(res) # True

#isdisjoint() 检测两集合是否不相交  不相交 True  相交False
set_father = {"周星驰","周杰伦","周润发","王文"}
set_son  = {"周星驰","周杰伦"}
res = set_father.isdisjoint(set_son)
print(res) # 是相交的 所以是false

集合的相关函数

# 增 
#add()    向集合中添加数据
setvar = {"刘浩杰","徐信信","何伟福","林志远"}
setvar.add("胡斌")
print(setvar)

#update() 迭代着增加
setvar = {"刘浩杰","徐信信","何伟福","林志远"}
lst = ['胡家豪',"胡启超"]
setvar.update(lst) #把列表当中的元素一个一个拿出来放进集合中,需要时可迭代性数据

setvar = {"刘浩杰","徐信信","何伟福","林志远"}
strvar = "abcd"
setvar.update(strvar) 
print(setvar)

# 删
#clear()  清空集合
setvar = {"刘浩杰","徐信信","何伟福","林志远"}
setvar.clear()
print(setvar)

#pop()    随机删除集合中的一个数据
setvar = {"刘浩杰","徐信信","何伟福","林志远"}
res = setvar.pop()
print(res)
print(setvar)

#remove()  删除集合中指定的值(不存在则报错)
setvar = {"刘浩杰","徐信信","何伟福","林志远"}
setvar.remove("徐信信")
print(setvar)
# setvar.remove("徐信信1")

#discard() 删除集合中指定的值(不存在的不删除 推荐使用)
setvar = {"刘浩杰","徐信信","何伟福","林志远"}
setvar.discard("何伟福121211212") # 如果这个值不存在,就不删除,也不报错
print(setvar)


# ### 冰冻集合
'''
#frozenset 可强转容器类型数据变为冰冻集合
冰冻集合一旦创建,不能在进行任何修改,只能做交叉并补操作
'''
# 定义一个空冰冻集合
fz = frozenset()
print(fz,type(fz))

fz1 = frozenset([1,"2",3,4])
fz2 = frozenset("7892")
print(fz1,fz2)

# 并冻集合只能做交叉并补
res = fz1 & fz2
print(res)
# fz1.add(4) error 没有增加或删除操作


文件操作


文件的读写操作

'''
fp = open('打开的文件',mode='模式选择',encoding='编码集')
open 函数 返回一个文件io对象(别名:文件句柄)
i => input 输入  o => output 输出
'''
# (1)写入文件内容(把大象放到冰箱三部曲)
# 打开文件(打开冰箱门)
fp = open('1.txt',mode='w',encoding='utf-8')
# 写入内容(放入大象)
fp.write('我就是那个大象')
# 关闭文件(关闭冰箱门)
fp.close()

# (2)读取文件内容
fp = open('1.txt',mode='r',encoding='utf-8')
res = fp.read()
fp.close()
print(res)

# b bytes模式(二进制的字节流)
'''
一堆字符放在一起 是字符串
一堆字节放在一起 是字节流
字节流用来传输数据和保存数据
'''
# 在ASCII编码字符前加上b,代表二进制字节流,其他所有字符都不能这样加
strvar = b'123'
print(strvar,type(strvar)) # b'123' <class 'bytes'>
# 使用encode和decode来把中文转化成二进制字节流
# encode把中文变成字节流(编码)
strvar = '你好python'
res = strvar.encode('utf-8')
print(res)
# decode 把字节流变成中文(解码)
strvar = res.decode('utf-8')
print(strvar)

# 复制图片
# 实际上就是把图片中的二进制字节流拷贝出来,放到另外一个文件当中
'''二进制字节流模式,不要指定编码集utf-8'''
# 读取文件里的内容
fp = open('1.png','rb')
res = fp.read()
fp.close()
# 写入另外一个文件
fp = open('2.png','wb')
fp.write(res)
fp.close

文件的扩展模式 +

在urf-8编码格式下 默认一个中文三个字节 一个英文或符号占用一个字节
read() 功能: 读取字符的个数(里面的参数代表字符个数)
seek() 功能: 调整指针的位置(里面的参数代表字节个数)
tell() 功能: 当前光标左侧所有的字节数(返回字节数)

r模式不能够自动创建文件,w和a都可以自动创建文件
r+模式:

# (1) r+ 可读可写(先读后写)
fp = open('2.txt',mode='r+',encoding='utf-8')
res = fp.read() # 读之前光标在0 读之后在末尾 所以写的时候等于追加
print(res)
fp.write('你好呀')
# 读取所有字符串
fp.seek(0)
res = fp.read()
fp.close()
print(res)

# (2)r+ 可读可写(先写后读)
fp = open('3.txt',mode='r+',encoding='utf-8')
fp.seek(0,2) # 写之前把光标放到文件末尾,不然把前面的内容覆盖
fp.write('闫帅')
fp.seek(0) # 写完之后把光标放到文件开头,不然读不到内容
res = fp.read()
fp.close()
print(res)

w+模式

# w+ 可读可写 默认光标在文件的开头
fp = open('4.txt',mode='w+',encoding='utf-8')
fp.write('今天要学习完函数')
# 可读
fp.seek(0)
res = fp.read()
print(res)
fp.close()

a+模式:

# a+ append 可读可写 (默认光标在文件的结尾) (在写入的时候,只能在末尾强制追加)
fp = open("5.txt",mode="a+",encoding="utf-8")
fp.write("今天晚上要早走")

fp.seek(0)
res = fp.read()
print(res)
fp.close()

with语法

# 可以使用with 语法 简化操作  可以省去fp.close() 这句代码,实现自动关闭
# with + open(文件操作) as 为open的返回值起别名  fp 就是名称
# 相当于 fp = open() 一样的
with open("6.txt",mode="a+",encoding="utf-8") as fp:
	fp.write("ceshidaima")
	fp.seek(0) # fp.seek(0,2) 移动到文件的末尾
	res= fp.read()
	print(res)
	# fp.close 这句话 with语法自动帮助我们完成

# 简化文件复制操作  open 之间 可以用逗号,隔开 为了简化操作
with open("集合.png",mode="rb") as fp1,open("集合3.png",mode="wb") as fp2:
	res = fp1.read()
	strvar  = fp2.write(res)

文件操作的相关函数

(1)flush 刷新缓冲区

'''
当文件关闭的时候自动刷新缓冲区
当整个程序运行结束的时候自动刷新缓冲区
当缓冲区满了 会自动刷新缓冲区
手动刷新缓冲区
'''
fp = open("7.txt",mode="w+",encoding="utf-8")
fp.write("我在测试close操作")
# 立刻把缓冲区里面的内容刷入文件当中,缓冲区只是临时存储数据用的.不会一直存数据
fp.flush() 
# while True:
	# pass
fp.close()

(2) readline() 读取一行内容

'''
readline(字符个数) 单位读的时字符的个数
如果当前字符个数 > 实际个数 那就只读当前行
如果当前字符个数 < 实际个数 那就按照给与的当前个数读取 
'''
# 读出所有行数 每一行都读
fp = open("0414_8.txt",mode = "r+",encoding="utf-8")
res = fp.readline(3)
# res = fp.readline()
# 判断res是不是为空,如果不是空,则进去打印该字符串
while res:
	print(res)
	# 在继续向下读取一行
	res = fp.readline() # 读到最后是一个'' bool('') => False

# 文件对象具有可迭代性  
# 遍历fp对象 和 readline一行一行读取的操作是一样的.
for i in fp:
	print(i)

(3) readlines() 将文件中的内容按照换行读取到列表当中

listvar = []
with open("0414_8.txt",mode = "r+",encoding="utf-8") as fp:
	
	res = fp.readlines()
	# 过滤数据
	for i in res:
		# 过滤两边的空白符
		res = i.strip()
		# 把过滤好的数据直接插入到列表当中
		listvar.append(res)
print(listvar)

(4) writelines() 将内容是字符串的可迭代性数据写入文件中 参数:内容为字符串类型的可迭代数据

with open("0414_9.txt",mode="w+",encoding="utf-8") as fp:
	# strvar = "123456"
	# strvar = ["aaa",'bbb','ccc']
	# res = str([1,2,3,4,5])
	fp.writelines(res)

(5) truncate() 把要截取的字符串提取出来,然后清空内容将提取的字符串重新写入文件中 (字节)

with open("0414_9.txt",mode="r+",encoding="utf-8") as fp:
	fp.truncate(5)

(6) readable() 判断文件对象是否可读 writable () 判断文件对象是否可写

fp = open("0414_9.txt",mode="w",encoding="utf-8")
res1 = fp.readable()
res2 = fp.writable()
print(res1,res2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值