Python一些简单基础的模板化语法
字符串的格式化
%s:可以接收任何类型的传值(%d只可以接收整型int)
-
单个值
"my age is %s" %"18.56" -
按照值对应
res = "my name is %s,my age is %s" %("xj",18) -
按照字典传值
res = "my name is %(name)s,my name is %(age)s" % {"age": "Day23", "name": "xj"} -
显示%
"成功的概率%s%%" %(70)
str.format:python 2.6以后兼容性最好
-
类似%s的用法
"my name is {},my age is {}".format("xingjie",Day23) -
索引用法,按照位置传值
"my name is {0}{0},my age is {1}{1}".format("xingjie",Day23) -
字典用法,打破位置限制,按照key=value
"my name is {name},my age is {age}".format(name="xingjie1",age=223)
格式化填充
-
表示一共输出十个字符,在x变量右边补充到十个字符
print("{x:=<10}".format(x="开始")) -
表示一共输出十个字符,在x变量左边补充到十个字符
print("{x:=>10}".format(x="结束")) -
表示一共输出十个字符,在x变量居中补充到十个字符print("{x:=^10}".format(x="过程")) -
打印进度条效果
tsize = 485218 #相差太大看不出效果 dsize = 0 while dsize < tsize: dsize+=1024 psize=round(dsize/tsize,2) # round(a,n)数字a保留n位小数 if psize <= 1: num=int(psize*100) time.sleep(0.3) print('\r[%-100s]' %(num*'#'),'%s%%' %(num),end='') else: break
保留小数点
- ****
print("{salary:.3f}".format(salary=123.1234567))
f:python3.5以后支持
-
直接传值
x = "xj" y =18 res = f"my name is {x},my age is {y}" -
多显示一个{}
x = "xj" y =18 res =f"姓名是{{{x}}},年龄是{{{y}}}" -
{}内可以当作表达式运行
a=f"{10+3}"
常用运算符(加减乘除不写)
算数运算符
print(10 / 3)#结果带小数
print(10 // 3)#结果只保留整数部分
print((11 % 2) )#取模,取余数
print(10 ** 3)#10的三次方
赋值运算符
###不仅可以是加,减,乘,除,取模,次方,都可以
age += 1
列表和字典
列表
l = [11, 22, 'hello', 44]
-
添加
l.append(55) -
插入
l.insert(3,'world') ###在索引为3的位置上新增'world' -
删除
### 单纯的删除,无法赋值 del l[2] ### 根据索引删除 l.pop(3) res=l.pop() #不指定索引默认删除最后一个,有返回值(返回被删除的值),能被赋值 ### 根据列表的值删除,返回值为None l.remove([1,2,3]) -
寻找元素所在的位置,找不到抛错
l.index(44)
字典
-
构造
info=[ ['name','xj'], ('age',18), ['gender','male'] ] d1=dict(info) -
初始化
keys=['name','age','gender'] d={} d={}.fromkeys(keys,None)
d1 = {'name': 'xj', 'age': 18, 'gender': 'male'}
-
取值
###取key为‘name’的值,key不存在报错,也能赋值 d1['name'] ###取key为‘name’的值,key不存在报错 ###取key为‘stu’的值,key不存在返回None d1.get('stu') -
删除
### 单纯删除 del d1['age'] ### pop删除:根据key删除元素,返回值为key对应的value d1.pop('age') ### popitem,随机删除,返回删除的元组 d1.popitem() -
新增
### 将d1新字典覆盖到d的老字典中,同一个key时,以新字典的值为准 d={'k1':1,'k2':2,'k3':4} d.update(d1)
函数
- 装饰器模版
def outter(func):
def wrapper(*args,**kwargs):
# 1.调用原函数
# 2.为其增加新功能
res=func(*args,**kwargs)
return res
return wrapper
表达式
-
三元表达式:
返回值 if判断 else 返回值x=1 y=2 res='xing' if x>y else 'jie' -
列表生成式:
[expression for item1 in iterable1 if condition1]### 列表 l=['alex_dsb','lxx_dsb','wxx_dsb','xxq_dsb','jack','rose'] new_l=[name for name in l if name.endswith('dsb')] new_ll=[name.upper() for name in l ] new_lll=[name.strip('_dsb') for name in l ] ### 字典 keys=['name','xj','gender'] dict={key:None for key in keys} items=[('name','xj'),('age',18),('gender','male')] res={k:v for k,v in items if k!='gender'}
函数式
- 匿名函数:
lambda## 定义匿名函数 lambda x,y:x+y #默认带return,接收x,y,然后运行x+y,将此结果当作返回值返回 ## 调用匿名函数 # 1.用函数方式调用 res=(lambda x,y:x+y)(1,2) # 2.复制给函数名,调用 func=lambda x,y:x+y ## 比较value的大小,返回相应的key值(max,min,sort一样的使用方法) salaries = {'a': 19000, 'b': 300, 'c': 80090, 'd': 7000} res=max(salaries,key=lambda k:salaries[k] )
try...except...捕获报错机制
执行规则
-
try内部
- 异常发生前:正常执行
- 异常发生时:立即跳转到对应的
except块 - 异常发生后:异常行之后的代码不执行
-
except块
尽量具体捕获异常,不要用空的except- 匹配的异常:执行对应的
except块 - 不匹配的异常:继续向上层抛出
- 空的
except:捕获所有的异常
- 匹配的异常:执行对应的
-
else
只在没有发生异常时执行 -
finally
finally用于资源清理(关闭文件、释放锁等);不要在finally中return,会掩盖异常- 无论如何都会执行
- 即使有return,break,continent也会执行
- 即使异常未被捕获也会执行
执行流程示意图
开始
↓
执行try块
↓
是否发生异常? → 否 → 执行else块(如果有)
↓是 ↓
匹配except块? ↓
↓ ↓
↓是 → 执行except块 执行finally块(如果有)
↓ ↓
执行finally块(如果有) ↓
↓ ↓
继续执行后续代码 ←───────┘
↓
结束
except捕获异常类型
- 捕获特定异常
try:
# 可能抛出异常的代码
pass
except ValueError:
# 只处理ValueError
pass
except TypeError:
# 只处理TypeError
pass
- 捕获多个异常(使用元组)
try:
# 可能抛出异常的代码
pass
except (ValueError, TypeError):
# 处理ValueError或TypeError
pass
- 将异常实例赋值给变量
try:
# 可能抛出异常的代码
pass
except ValueError as e:
# e是ValueError的实例,可以访问异常信息
print(e) # 打印异常信息
# 也可以访问异常的其他属性,例如args
- 捕获所有异常
捕获所有异常,包括键盘中断和程序退出请求,所以不推荐
try:
# 可能抛出异常的代码
pass
except:
# 捕获所有异常,包括键盘中断和程序退出请求(除非特别需要,否则不推荐)
pass
- 捕获所有异常(非系统退出的异常)
try:
# 可能抛出异常的代码
pass
except Exception as e:
# 捕获所有从Exception继承的异常,但不包括SystemExit等
print(e)
- 捕获异常后重新抛出
想记录异常但又不处理它,可以重新抛出
try:
# 可能抛出异常的代码
pass
except ValueError as e:
print("记录异常:", e)
raise # 重新抛出当前异常
- 捕获异常并转换为其他异常
try:
# 可能抛出异常的代码
pass
except ValueError as e:
raise TypeError("转换异常类型") from e
- 多个except块的情况
当有多个except块时,它们会按顺序匹配,因此应该将更具体的异常放在前面,更通用的异常放在后面。
try:
# 可能抛出异常的代码
pass
except ValueError:
# 处理ValueError
pass
except Exception:
# 处理其他异常
pass
- ** 使用else和finally**
try:
# 可能抛出异常的代码
pass
except ValueError:
# 处理异常
pass
else:
# 无异常时执行
pass
finally:
# 总是执行
pass
模块
- 使用
# if __name__ == '__main__': #主程序 # foo() #在被当做脚本执行时,执行此处的代码 # 1.当foo.py被当成程序运行时,__name__的值为'__main__' # 2.当foo.py被当成模块运行时,__name__的值为'foo'
时间模块:time
-
time.time()时间戳:从1970年到现在经过的秒数
![]()
-
time.strftime():按照某种格式显示时间
![]()
# 1.struct_time 转 时间戳 s_time=time.localtime() print(s_time) print(time.mktime(s_time)) print(time.time()) # 2.时间戳 转 struct_time tp_time=time.time() print(time.localtime(tp_time)) print(time.localtime()) #当地时区,上海 print(time.gmtime()) #世界时区
random模块
-
random.random():(0,1)的随机小数 -
random.randint(m,n):(m,n)的随机整数,包括1,7 -
random.randrange(m,n,i):(m,n)的随机整数,包括m,n,依次增加i -
random.randrange(m,n):(m,n)的随机整数,顾头不顾尾 -
random.choice([11,'aa',22,'bb',33,'cc']):随机从列表中抽取,包括字符串,整型 -
random.sample([11,'aa',22,'bb',33,'cc'],3)):必需指定取值个数,从列表中随机取出3个值 -
random.uniform(1,3):随机取出大于1,小于3的小数 -
随机验证码,字母chr(65,90)26个大写字母,chr(97,122)26个小写字母
def make_code(n): res='' for i in range(n): Char=chr(random.randint(65,90)) char=chr(random.randint(97,122)) num=str(random.randint(0,9)) res+=random.choice([Char,char,num]) print(res)
os模块
-
os.sep:输出操作系统特定的路径分隔符,win下为"\",Linux下为"/" -
os.linesep:输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" -
os.pathsep:输出用于分割文件路径的字符串 win下为;,Linux下为: -
os.name:输出字符串指示当前使用平台。win->'nt'; Linux->'posix' -
os.environ:获取系统环境变量 -
os.getcwd()获取当前工作目录,即当前python脚本工作的目录路径 -
os.chdir():改变当前脚本工作目录;相当于shell下cdos.chdir('E:/StudyProject/Day12') -
os.curdir:返回当前目录: ('.')(显示当前所在目录) -
os.pardir:windows返回的默认值是.. -
os.path.abspath(os.pardir):返回path规范化的绝对路径 -
os.makedirs():递归在当前目录下生成文件夹,/,windows系统也不要用\os.makedirs('test_father/test_son') -
os.mkdir():生成单级目录;相当于shell中mkdir dirnameos.mkdir('father') -
os.removedirs():删除目录,只能删除一层目录os.removedirs('test_son') -
os.remove():删除指定路径下文件,不能以逗号隔开写多个文件os.remove('./test_father/test.txt') -
os.removedirs():若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推os.removedirs('./test_father/test_son') -
os.rmdir():删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirnameos.rmdir('father') -
os.rename():重命名文件,目录,rename 和renames用法差不多os.rename('../Test','../作业') os.renames('test.txt','../作业/write.txt') -
os.path.getsize();显示文件大小print(os.path.getsize('a.txt')) -
显示文件时间
-
os.path.getatime(filename/path):这个时间戳表示自 Unix 纪元(1970年1月1日 00:00:00 UTC)以来文件或目录最后一次被读取或写入的时间。这个时间戳通常用于文件或目录的元信息检查,以确定文件或目录何时被最后一次访问。 -
os.path.getmtime(filename/path):表示自 Unix 纪元(1970年1月1日 00:00:00 UTC)以来文件或目录内容最后一次被修改的时间;这个时间戳通常用于确定文件或目录的内容何时被最后一次更改 -
os.path.getctime(filename/path):用于获取文件或目录的创建时间(ctime);这个创建时间通常指的是文件或目录元数据(如权限、所有权等)最后一次更改的时间,而不是文件内容本身的创建时间。
-
shutil模块:可以看做是OS模块的补充,它提供了对文件(夹)复制,移动,删除,压缩和解压缩的方法
-
shutil.copyfileobj():将文件内容拷贝到另一文件中shutil.copyfileobj(open('father/test.txt','r'),open('father/b.txt','w')) -
shutil.copyfile():拷贝文件shutil.copyfile('father/test.txt','../Test/father.txt') -
shutil.copymode():仅拷贝权限。内容、组、用户均不变,目标文件必需存在shutil.copymode('father/test.txt','../Test/father.txt') -
shutil.copystat(src, dst):拷贝文件和状态信息 -
shutil.copy(src, dst):递归的去拷贝文件夹 -
shutil.copy2(src, dst):拷贝文件和状态信息 -
shutil.ignore_patterns(*patterns):递归的去拷贝文件夹 -
shutil.copytree(src, dst, symlinks=False, ignore=None):递归的去拷贝文件夹 -
shutil.rmtree(path[, ignore_errors[, onerror]]):递归的去删除文件 -
shutil.move(src, dst):递归的去移动文件,它类似mv命令,其实就是重命名 -
shutil.make_archive(base_name, format,...):创建压缩包并返回文件路径,例如:zip、tar;创建压缩包并返回文件路径,例如:zip、tar
sys模块
-
sys.argv:命令行参数List,第一个元素是程序本身路径 -
sys.version;获得Python解释器版本 -
sys.path:解释器路径 -
sys.platform:返回操作系统平台名称
json模块
import json
###python 转换成 json
l=['a',1,True,False,None]
l_j=json.dumps(l)
print(l_j,type(l_j)) # ["a", 1, true, false, null] <class 'str'>
#序列化导入
f=open('json1.txt',mode='w')
l_j=json.dump(l,f)
###json 转换成 python
l='["a", 1, true, false, null]' #json 不认单引号,但是python,引号内外层不能一样,所以,外层要用单引号
l_p=json.loads(l)
print(l_p,type(l_p))
#反序列化
f=open("json.txt",mode='r')
res=json.load(f)
configparser:处理.ini结尾的配置文件
import configparser
config=configparser.ConfigParser() #实例化一个对象
config.read('php.ini') #选择文件查看
### 查看
config.sections() #查看所有的标题
config.options('section1') #查看某个标题下,所有的key
config.items('section1') #查看某个标题下,key和value
config.get('section1','age') #查看某个标题下,key对应的value值,str格式
config.getint('section1','age') #查看某个标题下,key对应的value值,int格式
config.getfloat('section1','age') #查看某个标题下,key对应的value值,float格式
config.has_option('testtest','test') #判断某个标题下是否有某个key
config.has_section('test') #判断是否有某个标题
### 修改
config.add_section('testtest') #添加一个标题
config.set('testtest','test','445') #添加某个标题下的key和value,必须是str
config.remove_option('testtest','test') #删除某个标题下key
config.remove_section('testtest') #删除某个标题,(key和value)也被删除
config.write(open('test.ini','w')) #将修改写入文件,没有这句文件不改变



浙公网安备 33010602011771号