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] )
模块
- 使用
# 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 dirname
os.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')) #将修改写入文件,没有这句文件不改变