基础篇 debug、注释、输出函数、输入函数 debug #debug中代码为蓝色时,表示即将要运行的代码
#Run to Cursor 跳到下一个断点的位置
总结:可以通过debug调试看到程序执行的顺序
注释 单行注释,以#号开头
多行注释,三引号
快捷键:Ctrl+/
输出函数print print(*values,sep, end)其中:
*value 值,表示一次可以输出多个对象,输出多个对象时,需要用逗号(,)分隔
sep 就是用来间隔多个值,默认是空格
end 用来设定用什么结尾,默认是换行符’\n‘,可以换成其他字符
input(prompt) prompt是提示,会在控制台显示
注:用户输入的是字符串类型
变量 变量可以被反复赋值
标识符
关键字 Python中已经使用的标识符,具有特殊的功能和含义
变量命名规范
见名知义
下划线分隔法:
多个单词的名称,使用小写字母,单词与单词之间用下划线分开
3.大驼峰命名法:
多个单词组成的名称,每个单词的首字母大写,其余字母小写
4.小驼峰命名法:
第一个单词首字母小写,后面单词首字母大写,其余字母小写
格式化输出 占位符 生成一定格式的字符串
%
%s 字符串(常用)
1 2 name='sunhao' print ("名字:%s" %name)
注:占位符只会占据位置,并不会被输出
%d 整数(常用)
1 2 3 age =19name ='sunhao' print ("名字:%s,年龄:%d" %(name,age))
3.%f 浮点数(常用)
#默认六位小数,遵循四舍五入原则
2.f格式化 格式:
f“{表达式}”
运算 1.除号 ’/‘
与C语言中不同,python中结果为浮点数,’//‘这个符号才是整除
注意:整除的时候,向下取整,不管四舍五入的规则,只要后面有小数,全部忽略
2.取余 ’%‘
只取余数部分
转义字符 1 2 3 4 5 6 7 8 9 10 # 1. \t 制表符 通常表示四个字符 也称缩进 # print (name\tage)# 2. \n 换行符 表示当前位置移动到下一行的开头 # print ('哈哈\n嘻嘻' )# 3. \r 回车 表示当前位置移到本行开头 # print ('six\rstar' )# 4. // 反斜杠符号 # print ('six\\star' )# 5. # print (r'six\\\star' )
循环 while循环
注:若不改变变量则成为死循环
相当于:
1 2 while True :#若改为False ,则不会执行 循环体
打印九九乘法表(while循环嵌套应用) 1 2 3 4 5 6 7 8 9 a =1while a<=9: b =1 while b<=a: print (f'{a}*{b}={a*b}' ,end ='\t' ) b+=1 print () a+=1
for循环 1 2 3 4 5 6 7 for 临时变量 in 可迭代对象: 循环体 range(start ,stop ,step)
#字符串是一个可迭代对象
break和continue关键字 break 中途退出,结束循环
continue 结束当前循环,进入下一次循环
注意:
在continue之前,一定要修改计数器,否则会进入死循环
字符串 1 2 3 4 5 6 7 8 # 字符串编码转换# a ='hello'# print (a ,type (a ) ) # str ,字符串是以字符为单位进行处理# a1 =a.encode("utf-8") # 编码# print ("编码后:" ,a1 ) # print (type (a1 ) ) # bytes ,以字节为单位进行处理的# a2 =a1.decode("utf-8") # 解码# print (a2 ,type (a2 ) )
字符串常见操作 字符串拼接 ’+‘:
1 2 3 4 5 6 print ('10' +'10' ) #1010 字符串相加,等于字符串拼接 num1='20' num2='40' print (num1+num2) #2040 print (num1,num2,sep='' )
重复输出 ’*‘
1 2 print ('字符串' *3 )#字符串字符串字符串
查找 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 name ='sunhaou' print (name.find ('u' ))#1 --第一个u的下标为1print (name.find ('sun' ))#0 --检测到第一个sun,s的下标为0print (name.find ('s' ,2))#-1 --超出范围,不包含,返回-1print (name.find ('h' ,3,5))#3name ='我命由我不由天' print (name.index('命' )) #1 name=('suunhao' )print (name.count('u' )) #2print (name.count('x' )) #0
判断 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #判断 #1 .startswith ():是否以某个子字符串开头,是的话就返回True,不是的话就返回False,如果设置开始和结束位置 #则在指定范围内检查 st=('sixstar' )print (st.startswith('six' ) ) #True print (st.startswith('s' ,2 ,6 ) ) #False #2 .endwith ():是否以某个子字符串开头,是的话就返回True,不是的话就返回False,如果设置开始和结束位置 #则在指定范围内检查 st=('sixstar' )print (st.endswith('ar' ) ) #True print (st.endswith('er' ) ) #False #3 .isupper ():检测字符串中所有字母是否为大写,是的话返回True st=('sixstar' )print (st.isupper() ) #False print ('SIX' .isupper() ) #True
字符串的成员运算符 作用:检查字符串中是否包含了某个子字符串(即某个字符或多个字符)
in:如果包含返回True,不包含返回False
not in:如果不包含返回True,包含返回False
字符串修改 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 修改元素name ='好好学习,天天向上' print (name.replace('天' ,'时' ))#好好学习,时时向上print (name.replace('天' ,'时' ,1))#好好学习,时天向上st ='hello,python' print (st.split(',' ))#['hello' , 'python' ] --以列表的形式进行返回print (st.split('a' ))#['hello,python' ]st ='hello' print (st.capitalize())#Hellost ='JGYhsuw' print (st.lower())#jgyhsuwst ='hello' print (st.upper())#HELLO
列表 列表常见操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #1 .添加元素append () :整体添加元素extend () :分散添加,将另一个类型的元素逐一添加 注意: a=[1,2,3] a .extend (4 ) #报错,extend添加的只能是可迭代对象insert () :在指定位置添加元素 #2 .删除元素 del: 用法: 1 .del 列表名 2 .del 列表名[下标] #删除对应元素 pop: 删除指定下标的数据,python3默认删除最后一个 列表名.pop (下标) remove:根据元素的值进行删除 列表名.remove (列表中的元素) 注:1 .元素不在列表中会报错2 .默认删除最开始出现的指定元素 #3 .排序 sort:将列表按特定顺序重新排序,默认从小到大 列表名.sort () reverse:倒序 列表名.reverse () #4 .列表推导式 格式一:[表达式 for 变量 in 列表] in 后面不仅可以放列表,还可以放range ()、可迭代对象 格式二:[表达式 for 变量 in 列表 if 条件] #将奇数放到列表中 li=[] [li.append(i) for i in range(1,11) if i%2==1] print (li) #[1, 3, 5, 7, 9]
元组 1.只支持查询操作,不支持增删改操作
2.count(),index(),len()与列表的用法相同
3.可以进行切片操作
应用:
函数参数和返回值
格式化输出后面的()本质就是一个元组
1 2 3 4 5 6 name ='sunhao' age =19info = (name,age)print (type(info))print ('%s的年龄是:%d' %info)
字典 注:
字典中的键具有唯一性,但是值可以重复
键名重复不会报错,会被后面的值进行覆盖
字典常见操作一 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #字典常见操作一 #查看元素 变量名[键名]#键名不存在会报错 变量名.get('键名' ,'不存在时的返回值' )#不存在默认返回None #修改元素和新增元素 #变量名[键名] = 值 键名存在修改,不存在新增#删除元素 #1.del #删除整个字典 del 字典名 # 删除指定键值对 del 字典名['键' ] #键名不存在就会报错 #2.clear() #清空整个字典里面的东西,但保留了这个字典 #用法:字典名.clear() #3.pop() #删除指定键值对,键不存在就会报错 #用法:字典名.pop() #4.popitem() #3.7后的版本默认删除最后一个键值对
字典常见操作二 1 2 3 4 5 6 7 8 9 10 11 #字典常见操作二 #1.len()求长度 #用法:len(字典名),得到键值对的个数 #2.keys():返回字典里面包含的所有键名 #用法:字典名.keys() #3.values():返回字典里面包含的所有值 #4.item():返回字典里面包含的所有键值对 #键值对以元组形式
集合
集合的常见操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 s1 ={1 ,2 ,3 ,4 }s1 .add(5 )print (s1) #{1 , 2 , 3 , 4 , 5 }s1 .add((4 ,5 ))print (s1) #{1 , 2 , 3 , 4 , 5 , (4 , 5 )}s2 ={1 ,2 ,3 ,4 }s2 .update([4 ,5 ,6 ]) #元素必须是能够被for循环取值的可迭代对象print (s2)#{1 , 2 , 3 , 4 , 5 , 6 }
深浅拷贝 赋值 等于完全共享资源,一个值的改变会完全被另一个值共享
浅拷贝 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import copy li=[1 ,2 ,3 ,[4 ,5 ,6 ]] li2=copy.copy(li)print ('li的内存地址' ,id (li))print ('li2的内存地址' ,id (li2)) li.append(8 )print ('li' ,li)print ('li2' ,li2) li[3 ].append(9 )print ('li' ,li)print ('li2' ,li2)print ('li[3]的内存地址' ,id (li[3 ]))print ('li2[3]的内存地址' ,id (li2[3 ]))
深拷贝 1 2 3 4 5 import copy li2=copy .deepcopy(li)
可变对象 含义:变量对应的只可以修改,但是内存地址不会发生改变
常见可变类型:
list #列表
dict #字典
set #集合
不可变对象 含义:变量对应的值不能被修改,如果修改就会产生一个新的值从而分配新的内存空间
数值类型:int、bool、float、complex
字符串:str
元组:tuple
注意:深浅拷贝只针对可变对象
函数 注意:
遇到return,以下的语句不执行
return返回多个值,是以元组的形式返回
若return后为空,则返回None
函数参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 默认参数 # 设置默认值,没有传值会根据默认值来执行代码,传了值根据传入的值来执行代码 # 注意: # 所有的位置参数必须出现在默认参数前,包括函数定义和调用 # 可变参数 # 传入的值的数量是可以改变的,可以传入多个,也可以不传 # 格式:def func(*args): # 传入的数据以元组形式接收 # 关键字参数 # 格式:def fun (**kwargs) # 传入的数据以字典形式接收 # 传值:fun (name='sunhao' ,age=19 ) # 以键等于值的方式去传值 # def fun (**kwargs) : # print(kwargs) # fun (name='sunhao' ,age=19 ) # {'name' : 'sunhao' , 'age' : 19 }以字典形式返回
全局变量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 a =100 def funb(): print(a ) def func(): global a a =120 print(a ) print('函数执行前a的值' ,a ) funb() func() print('函数执行后a的值' ,a )global 关键字可以对全局变量进行修改吗,也可以在局部作用域中声明一个全局变量
nonlocal关键字 –了解: 用来声明外层函数的局部变量,在外部函数先进行声明,内层进行nonlocal声明
注意:
在嵌套函数内使用
只能对上一级进行修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 def outer (): a=5 def inner (): nonlocal a a=20 def inner2 (): a=30 print ('inner2:' ,a) inner2() print ('inner:' ,a) inner() print ('outer:' ,a) outer()
匿名函数(lambda关键字的使用) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 add = lambda a,b : a+b #不需要return,表达式本身就是返回值print (add (1,3))#4 funa = lambda :"sunhao" print (funa()) funb = lambda name:nameprint (funb('sunhao' )) func = lambda name,age =18:(name,age)print (func('sunhao' )) # ('sunhao' , 18)print (func('sunhao' ,20)) # ('sunhao' , 20) fund = lambda a,b,c =12:a+b+cprint (fund(1,2)) # 15 fune = lambda **kwargs : kwargsprint (fune(name ='xunhao' ,age=19))#{'name' : 'xunhao' , 'age' : 19}
lambda的应用 1 2 3 4 5 6 7 # lambda结合if 判断 # a=5 # b=8 # #为真结果 if 条件 else 为假结果 # print('a比b小') if a<b else print('a大于等于b') comp = lambda a,b : 'a比b小' if a<b else 'a大于等于b' print (comp(4 ,1 )) # a大于等于b
内置函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 # 内置函数# 查看内置函数# import builtins# print(dir(builtins))# 大写字母开头一般是内置常量名,小写字母开头一般是内置函数名# 内置函数一:# abs () : 返回绝对值# sum () : 求和# 注意:sum(123)和sum('123')都是不被允许的# sum 函数内要放可迭代对象(字符串除外)# 运算时,只要有一个浮点数,结果就会是浮点数# 内置函数二:# min():求最小值# max():求最大值# print(min(-8,5,key=abs))# 5 传入了绝对值函数,则参数就会先求绝对值,再比较# zip () : 将可迭代对象作为参数,将对象中对应的元素打包成一个元组 li = [1,2,3] li2 = ['a','b','c'] print(zip(li,li2))# 第一种方式:通过for循环 for i in zip(li,li2): print(i)# 如果长度不一致,按照长度最短的返回# 第二种方式:转化成列表打印 print(list(zip(li,li2)))# [(1, 'a'), (2, 'b'), (3, 'c')]# map () : # map (func ,iter1 ) : func--定义的函数,iter1--可迭代对象 li = [1,2,3]# def func(x):# return x*5 func = lambda x : x*5# 和上面函数相同 mp = map(func,li)# 用for循环取出# for i in mp:# print(i)# 转化成列表打印 print(list(mp)) # [5, 10, 15]# reduce () : 先把对象中的两个元素取出,计算出一个值,然后保存着,接下来把这个计算值跟第三个元素进行计算 from functools import reduce# reduce (有两个参数的函数,可迭代对象) li2 = [2,3,4,5] add = lambda x,y : x+y res=reduce(add,li2) print(res) # 14
拆包 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 tua = (1 ,2 ,3 ,4 )a ,b,c,d = tuaprint (a,b,c,d) # 1 2 3 4 a , *b = tuaprint (a,b)#1 [2, 3, 4] def funa(a,b,*args): print (a,b)#1 2 print (args,type(args))#(3 , 4 , 5 , 6 , 7 ) <class 'tuple'>funa (1 ,2 ,3 ,4 ,5 ,6 ,7 )
异常、模块和包 异常 常见异常种类
异常处理 捕获异常 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 li=[1,2,3,4] try: print (li[3]) except: print ('超过下标范围' )else : print ('程序正常' ) #4 程序正常 try: print ('abc' ) except Exception: print ('这一行代码有错误' )else : print ('程序正常' ) finally: print ('无论怎样都会被执行' )
抛出异常 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def login (): pwd = input ('请输入您的密码:' ) if len (pwd)>= 6 : return '密码输入成功' raise Exception('长度不足六位,密码输入失败' )try : print (login())except Exception as e: print (e)
模块 内置模块 如:random、time、os、logging,直接导入即可使用
第三方模块(第三方库) 通过cmd窗口输入pip install 模块名下载
自定义模块 注意:命名要遵循标识符规定以及变量命名规范,且不要与内置模块产生冲突
模块导入 导入模块方式一 格式:import 模块名
模块:
导入模块:
导入模块方式二 格式:from…import…
#从模块中导入指定部分
1 2 3 4 5 from 模块名 import 功能1 ,功能2 ...from test import funa funa()
导入模块方式三 1 2 3 4 5 语法:from 模块名 import * 注意: 不建议过多使用from ...import ...有时命名冲突会导致一些错误
导入模块方式四 1 2 3 4 5 6 7 8 9 10 11 12 13 #as 取别名 #1. 给模块起别名 语法:import 模块名 as 别名import test as ts ts.funa() #这是test模块 这是test模块中的funa #2. 给功能起别名 语法:from 模块名 import 功能 as 别名from test import funa as a,name a() #这是test模块中的funa print(name) #sunhao
内置全局变量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 内置全局变量__name__ 语法:if __name__ =="__main__" : 作用: 用来控制py文件在不同的应用场景执行不同的逻辑print ('这是会显示的内容:' ) def test (): print ('啊哈哈哈' )if __name__=="__main__" : print ('这是不会显示的内容' ) import test test.test()
包 包和普通文件夹的区别:
创建包时会自动生成一个__init__.py文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 主函数 #import 导入包时,首先执行__init__.py文件中的代码 #导包方式一 # import pack_01 #这里是__init__.py #导包方式二 # from pack_01 import register # register.reg() #这里是__init__.py 这里是register #__all__:本质上是一个列表,列表里面的元素就代表要导入的模块 #作用:可以控制要引入的东西from pack_01 import * register.reg() login.log() __init__.py文件 # print('这里是__init__.py' ) # #不建议在init文件中写大量代码 # #主要作用:导入这个包内的其他模块 # from pack_01 import register # # register.reg() __all__ = ['register' ,'login' ] #相当于导入列表里面定义的模块 模块register def reg(): print('这是注册函数' ) # reg() 模块login def log(): print('这里是登录函数' )
闭包&装饰器 递归函数实现斐波那契数列 1 2 3 4 5 6 7 8 def funa (n ): if n <= 1 : return n else : return funa(n-1 )+funa(n-2 )print (funa(5 ))
闭包函数的简单使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 def outer (): n=10 def inner (): print (n) return inner ot = outer() ot() def outer (m ): n = 10 def inner (o ): print ('计算结果:' ,m+n+o) return inner ot = outer() ot(20 ) def outer (m ): print ('outer函数中的值' ,m) def inner (n ): print ('inner函数中的值' ,n) return m+n return inner ot = outer(10 ) print (ot(30 ))
装饰器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 def send (): print('发送消息' )def outer (fn ): def inner (): print('登录...' ) fn() return inner ot = outer(send) ot ()def outer (fn ): def inner (): print('登录...' ) fn() return inner@outer def send (): print('发送消息' ) send() 注意:有多个装饰器的时候,离函数最近的装饰器先装饰,由内到外的过程
面向对象 面向过程和面向对象 面向过程,就是先分析出解决问题的步骤,再把步骤拆成一个个方法是没有对象去调用的,通过一个个方法的执行解决问题
面向对象,就是将编程当成是一个事物(对象),对外界来说,事物是直接使用的,不用去管内部的情况,而编程就是设置事物能做什么事情。
类和对象 类 类的三要素:
类名
属性:对象的特征描述,用来说明是什么样子的
方法:对象具有的功能(行为),用来说明能做什么
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #定义类 #基本格式 # class 类名: #类名必须符合标识符标准,见名知意 # 代码块 class Washer : height=800 #类属性:就是类说拥有的属性 # 查看类属性: 类名.属性名 print (Washer.height) #800 # 新增雷属性: 类名.属性名 = 值 Washer.width = 450 print (Washer.width) #450 # 创建对象(实例化对象) # 格式: 对象名 = 类名() wa = Washer()print (wa) #<__main__.Washer object at 0x00000259461C7890> wa2 = Washer()print (wa2) #<__main__.Washer object at 0x00000259461C7910> # 地址不同,说明是不同的对象,可以实例化多个对象
实例方法和实例属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 class Washer : height = 800 def wash (self ): print ('我会洗衣服' ) wa = Washer() wa.wash() wa2=Washer() wa2.wash()class Person : name = '孙昊' def introduce (self ): print ('我是实例方法' ) print (f'{Person.name} 的年龄:{self.age} 岁' ) pe = Person() pe.age = 19 pe.introduce() pe.sex = '男' print (pe.sex)''' print(pe.name) print(Person.name) 访问类属性,类可以访问到,实例对象也可以访问到 '''
构造函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 class Person : def __init__ (self,name,age,height ): self.name= name self.age= age self.height= height def play (self ): print (f'{self.name} 在打王者荣耀' ) def introduce (self ): print (f'{self.name} 的年龄是{self.age} ,身高是{self.height} cm' ) pe = Person('sunhao' ,19 ,180 ) pe.play() pe.introduce()
析构函数 1 2 3 4 5 6 7 8 9 10 11 #析构函数 __del__() #删除对象的时候,解释器默认调用__del__()方法class Person: def __init__ (self ): print ('这是__init__ ()') def __del__ (self ): print ('被销毁了')p = Person ()print ('这是最后一行代码') #正常运行时,不会调用__del__ (),对象结束后,系统会自动调用 # __del__ ()主要是表示该程序块或者函数已经全部执行结束
文件操作 文件的基本操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #文件对象的方法 #1 .open ():创建一个file对象,默认是以只读模式打开 #2 .read (n):n表示从文件中读取的数据的长度,没有传n值就默认一次性读取文件的所有内容 #3 .write ():将指定内容写入文件#t .close ():关闭文件 #属性 #文件名.name :返回要打开的文件的文件名,可以包含文件的具体路径 #文件名.mode :返回文件的访问模式 #文件名.closed :检测文件是否关闭,关闭就用True f = open ('test.txt' )print (f.name) f.close ()
读写操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 f = open (r'C:\Users\28311\Desktop/test.txt' ) print (f.read()) f.close() f = open ('test.txt' )print (f.readline())print (f.readline())print (f.readline())while True : text = f.readline() if not text : break print (text,end='' ) f = open ('test.txt' ) text = f.readlines()for i in text: print (i,end='' ) f.close()
访问模式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # 文件定位操作# tell () 和seek()# tell () : 显示文件内当前位置,即文件指针当前位置# seek (offset ,whence ) : 移动文件读取指针到当前位置# offset :偏移量,表示要移动的字节数# whence :起始位置,表示移动字节的参考位置,默认是0,0代表文件开头作为参考位置,1代表当前位置作为参考位置,2代表将文件结尾当成参考位置# seek(0,0)就会把文件指针移到文件开头 f = open('test.txt','w+') f.write('hello python') pos = f.tell() # 文件内容长度 print('当前文件所在位置:',pos) f.seek(0,0) pos1 = f.tell() print('当前文件所在位置:',pos1) print(f.read()) # hello python f.close()
with open 1 2 3 4 5 #with open # 作用:代码执行完,系统会自动调用f.close(),可以省略关闭步骤with open('test01.txt' ,'w' ) as f: f.write('emmmmm...' ) print(f.closed) #True
编码格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ''' 1.读取图片 图片是一个二进制文件,想要写入必须要先拿到 2.写入图片 ''' with open (r'C:\Users\28311\Desktop\新建文件夹\图片.jpg' ,'rb' ) as f: img = f.read() print (img)with open (r'D:\pythonpro\孵化基地python\图片.jpg' ,'wb' ) as file: file.write(img)
获取目录操作 常见操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import os