版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章使用别人的积木块--模块与包1常州工业职业技术学院19五月2026Python程序设计丁辉袁凯烽商俊燕韩少勇范晓玲郝亚平王霞俊吴春晖目录
Contents01模块02包03标准库04模块与包应用精选案例0507小结2模块014编程,很多的时候要会使用别人的积木块来搭建自己的程序,站在巨人的肩上编程,将会做到事半功倍。Python语言的优点之一是免费开源,除自带丰富的模块外,有很多的编程爱好者,编写了大量功能强大的第三方库。用好Python自带的库和第三方库,是学习Python语言的基本目标。模块Python中的模块实际上就是包含函数和类的Python程序,它以“.py”为后缀。可以在需要的时候,通过import将它引用过来。
模块导入Python中提供了以下三种方式导入模块:(1)import模块名(2)import模块名as模块别名(3)from模块名import函数名/子模块名/属性
1.模块5每种导入方式,对于模块内方法和属性的调用是有区别的。importmath模块名.函数名/属性名print(math.pow(2,3))print(math.pi)importmathasshuxue别名.函数名/属性print(shuxue.pow(2,3)print(shuxue.pi)frommathimportpow直接调用导入的函数/属性print(pow(2,3))只能使用pow()函数frommathimport*,表示导入math模块的全部函数和属性1.模块6模块导入示例>>>importmath>>>print(math.pi)#调用math模块的pi属性3.141592653589793>>>print(math.pow(3,5))#调用math模块的pow()方法243.0>>>importmathasshuxue>>>print(shuxue.pi)3.141592653589793>>>frommathimportpow>>>pow(3,5)243.0>>>math.piTraceback(mostrecentcalllast):File"<pyshell#2>",line1,in<module>math.piNameError:name'math'isnotdefined>>>frommathimport*>>>pi3.141592653589793>>>pow(2,3)8.0>>>sqrt(67)8.18535277187245通过模块名调用属性、方法、子模块时,则会出现错误提示,抛出异常1.模块一般在模块导入时,添加别名,以方便操作,给长的模块名起一个简短的别名,另外也可以方便记忆,如对math不太熟悉,改成拼音的shuxue,可能就清楚在记得是数学函数相关的模块了导入了math模块的全部属性和方法,因此math模块内的全部方法和属性都可以直接调用1.模块7Python自带的模块或者是第三方库,在安装时,系统自动将模块的存放路径记录在sys.path列表中,在导入时,Python解释器会根据sys.path记录的路径去寻找要导入的模块。那么自己编写的模块,如何能让解释器知道路径呢?有两种方法。第一种方法是在sys.path列表里添加自己所写模块的路径;第二条方法是设置系统的环境变量,使其包含模块的路径。(1)列表里添加路径【例5-6】程序中调用了【例5-5】的函数,即通过“importeg5_5”把eg5_5.py模块导入到eg5_6.py中。在那里我们没有特别强调eg5_5.py的路径,是因为eg5_5.py和eg5_6.py在同一个路径下,所以Python解释器能够找到。如果eg5_5.py和eg5_6.py不在同一路径下,则需要将eg5_5.py的路径添加到sys.path列表中。现在eg5_5.py存放在“d:\py_study”路径下,则eg5_6.py代码修改如下:#eg5_6_1.py#导入sys模块importsys#sys.path列表里追加eg5_5.py的路径“d:\py_study”sys.path.append(“d:\\py_study")#导入eg5_5.py模块importeg5_5defevenDec(m):ifm%2==0andm>0:#range()的终止值是int(m/2)+1,不能超过此值,否则会有重复的输出foriinrange(3,int(m/2)+1):ifi%2==1andeg5_5.prime_judg(i)andeg5_5.prime_judg(m-i):print("%d=%d+%d"%(m,i,m-i))evenDec(34)2.模块的路径>>>importsys>>>sys.path['','C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\Lib\\idlelib','C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip’,……]查看path的值8(2)修改系统环境变量的值在windows11桌面上,右击“开始”图标,选择“系统”命令,按图示顺序操作即可完成环境变量的添加与修改。2.模块的路径12345679设置好环境变量后,【例5-6】的代码可以做如下修改。不需要修改sys.path列表的值,直接导入eg5_5.py模块即可。#eg5_6.py
importeg5_5
defevenDec(m):ifm%2==0andm>0:#range()的终止值是int(m/2)+1,不能超过此值,否则会有重复的输出forIinrange(3,int(m/2)+1):ifi%2==1andeg5_5.prime_judg(i)andeg5_5.prime_judg(m-i):print(“%d=%d+%d”%(m,I,m-i))evenDec(34)2.模块的路径10
命名空间表示标识符的可见范围。标识符就是用来标识某个对象的,包括变量名、函数名、模块名、类名等。一个标识符可在多个命名空间中定义,但它在不同命名空间中的含义是互不相关的。如有两个“刘卫东”同学在同一个学校不同的班级里,老师在各自的班级里点名时,直接喊“刘卫东”就可以了,自然就是本班的“刘卫东”同学,如果在全校点名时,就需要区分是哪个班的“刘卫东”了,这时候点名,需要采用“班级+刘卫东”的形式了。那么班级就是命名空间。
在Python中,每个模块都会维护一个独立的命名空间,在模块外使用标识符时,需要加上模块名,如math.pi,当然,也需要结合模块的导入方式,如果使用“from模块名import函数名/属性/子模块名”方式导入时,一定要注意不同的模块里不要存在相同的标识符。3.命名空间11Python中为了区分代码块是单独运行,还是作为模块导入到另一个代码中进行运行,通过对模块的__name__属性值的判断来进行识别。
模块作为单独的程序运行时,__name__属性的值是“__main__”,而作为模块导入时,__name__属性的值就是该模块的名字了,因此,从现在开始,每个py程序文件中,如果有函数、类的定义,则都进行这样的判断。即增加一个if__name__==’__main__’的判断。如【例5-5】的代码修改如下:#eg5_5_1.py#writebyding#2018-5-8importmathdefprime_judg(s):#由于range()不包含终值,所以要加1foriinrange(2,int(math.sqrt(s))+1):ifs%i==0:breakelse:returnTruereturnFalse
if__name__=='__main__':print(prime_judg(13))4.__name__属性包02包13
大型复杂的项目,通常会有多个模块,为了更好地管理这些模块,避免命名空间的冲突,Python中采用包进行管理。包其实就是一个文件夹或者叫目录,但其中必须包含一个名为“__init__.py”的文件。“__init__.py”文件的内容可以是空,仅用于表示该目录是一个包,也可以写入一些初始化代码。另外包可以嵌套,即把子包放在某个包内。有了包之后,导入模块时,需要加上包的名称,即包名.模块名。如【例5-6】和【例5-5】改用包进行管理。14在“d:\”下创建“py”文件夹;把eg5_5_1.py复制到py文件夹;在“d:\py”目录下,新建一个空的__init__.py文件;修改【例5_6】的代码如下,保存成eg5_6_2.py。#eg5_6_2.pyimportsysif“d:\\”notinsys.path:sys.path.append(“d:\\")#添加包py的路径到sys.path中importpy.eg5_5_1
defEven_Dec(m):ifm%2==0andm>0:#range()的终止值是int(m/2)+1,不能超过此值,#否则会有重复的输出foriinrange(3,int(m/2)+1):#调用模块要加上包名ifi%2==1andpy.eg5_5_1.prime_judg(i)andpy.eg5_5_1.prime_judg(m-i):print("%d=%d+%d"%(m,i,m-i))if__name__=='__main__':Even_Dec(34)4.__name__属性包标准库0316标准库:
那些在安装Python时就默认已经安装好的模块被称为“标准库”,也称为内建库,比如math库。有人把它们称为Python自带的电池,意思是Python拥有无限能量。熟悉标准库的使用是编程必须的。math模块中有大量常用的数学计算函数,如三角函数(sin(),cos(),tan())、反三角函数(asin(),acos(),atan())、对数函数(log(),log10(),log2())等,还有数学常量如pi(圆周率)、e等。>>>importmath>>>math.pi3.141592653589793>>>math.log2(8)3>>>dir(math)['__doc__','__loader__','__name__','__package__','__spec__','acos','acosh','asin','asinh','atan','atan2','atanh','ceil','copysign','cos','cosh','degrees','e','erf','erfc','exp','expm1','fabs','factorial','floor','fmod','frexp','fsum','gamma','gcd','hypot','inf','isclose','isfinite','isinf','isnan','ldexp','lgamma','log','log10','log1p','log2','modf','nan','pi','pow','radians','remainder','sin','sinh','sqrt','tan','tanh','tau','trunc']>>>print(math.__doc__)#__doc__存放的是模块的文档信息ThismoduleprovidesaccesstothemathematicalfunctionsdefinedbytheCstandard.>>>math.__name__#模块名字'math'1.math模块fornameindir(math):print(type(getattr(math,name)))17random模块主要用来生成随机数的。如randint()、random()、choice()等函数。random()函数:生成0~1之间的随机数>>>importrandom>>>random.random()0.014636057019557946randint(a,b)函数:生成一个整数,在a~b之间>>>random.randint(1,20)1>>>random.randint(1,20)5>>>random.randint(1,20)11choice(seq)函数:从序列seq中随机地选取一个元素>>>random.choice([1,2,3,4,5,6,7,8])5>>>random.choice([1,2,3,4,5,6,7,8])12.random模块18time模块是和时间相关的库。time()函数:时间戳函数,返回以1970年1月1日0时0分0秒起至今的总秒数>>>importtime>>>time.time()1525930831.9476714#这个时间戳就是运行该语句时的时间与起始时间之间的总秒数localtime()函数:获取本地时间>>>time.localtime()time.struct_time(tm_year=2021,tm_mon=11,tm_mday=14,tm_hour=15,tm_min=12,tm_sec=40,tm_wday=6,tm_yday=318,tm_isdst=0)3.time模块19索引属性含
义0tm_year年1tm_mon月2tm_mday日3tm_hour时4tm_min分5tm_sec秒6tm_wday一周中的第几天,取值[0,6],其中0代表星期一7tm_yday一年中的第几天,取值[0,365],其中0代表1月1日8tm_isdst是否夏令时,实行夏令时为正时间元组各项含义3.time模块20#通过索引可以获得某属性的值,通过属性也可以获得相应的值>>>time.localtime()[0]2021>>>time.localtime()[1]11>>>time.localtime().tm_hour15>>>time.localtime().tm_min12ctime()函数:把时间以字符串的格式显示>>>time.ctime()'SunNov1415:23:302021’strftime()函数:将时间转化为格式化的时间>>>time.strftime("%y",time.localtime())‘21'>>>time.strftime("%Y",time.localtime())‘2021'>>>time.strftime("%Y,%B,%d",time.localtime())‘2021,November,14'3.time模块21格式含义格式含义%a本地(locale)简化星期名称%p本地am或者pm的相应符%A本地完整星期名称%S秒(01-61)%b本地简化月份名称%U一年中的星期数(00–53,星期天是一个星期的开始),第一个星期天之前的所有天数都放在第0周。%B本地完整月份名称%w一个星期中的第几天(0-6,0是星期天)%c本地相应的日期和时间表示%W和%U基本相同,不同的是%W以星期一为一个星期的开始。%d一个月中的第几天(01-31)%x本地相应日期%H一天中的第几个小时(24小时制,00-23)%X本地相应时间%I第几个小时(12小时制,01-12)%y去掉世纪的年份(00-99)%j一年中的第几天(001-366)%Y完整的年份%m月份(01-12)%Z时区的名字(如果不存在为空字符)%M分钟数(00-59)%‘%’字符
时间格式化参数3.time模块22
虽然time模块可以把有关时间方面的功能都实现了,但是感觉使用有点繁琐,所以又出来了一个datetime模块。datetime模块是Python中用来处理时间和日期的。datetime模块定义了以下几个类,来处理时间和日期。(1)datetime.date:表示日期的类,常用的属性有year,month,day;(2)datetime.time:表示时间的类,常用的属性有hour,minute,second,microsecond;(3)datetime.datetime:表示日期和时间的类;(4)datetime.timedelta:表示时间间隔的类,即两个时间点之间的长度。>>>importdatetime
当前时间now()函数>>>print(datetime.datetime.now())2018-03-2308:35:32.266741当前时间today()函数>>>print(datetime.datetime.today())2018-03-2308:54:04.6855264.datetime模块23当前日期date()函数>>>print(datetime.datetime.now().date())2018-03-23时间元组timetuple()函数>>>datetime.datetime.now().timetuple()time.struct_time(tm_year=2018,tm_mon=3,tm_mday=23,tm_hour=8,tm_min=46,tm_sec=26,tm_wday=4,tm_yday=82,tm_isdst=-1)时间计算timedelta()函数使用datetime.timedelta()这个方法来前后移动时间,可以用的参数有weeks、days、hours、minutes、seconds、microseconds。>>>print(datetime.datetime.now())2018-06-0315:03:09.126645>>>print(datetime.datetime.now()+datetime.timedelta(hours=1))2018-06-0316:04:17.027529>>>print(datetime.datetime.now()+datetime.timedelta(days=1))2018-06-0415:04:54.310661>>>print(datetime.datetime.now()+datetime.timedelta(weeks=1))2018-06-1015:05:27.7855764.datetime模块24格式转化strftime()函数格式化参数同time的strftime()>>>datetime.datetime.now().strftime("%Y-%m-%d%H:%M:%S")'2018-03-2309:18:18'>>>print(datetime.datetime(2023,8,12).strftime("%Y-%m-%d%H:%M:%S"))2023-08-1200:00:00当前时间today()函数(date类)>>>t=datetime.date.today()#生成一个日期对象>>>t#输出t的值datetime.date(2018,5,10)>>>t.year#调用t的属性2018>>>t.month5>>>t.day10>>>datetime.datetime.today().strftime("%Y-%m-%d%H:%M:%S")2023-08-1120:20:044.datetime模块25calendar模块是一个日历模块,用于生成日历等。calendar()函数
:生成某年的日历。>>>importcalendar>>>print(calendar.calendar(2021))#打印出2021年的日历2021JanuaryFebruaryMarchMoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSu123123456712345674567891089101112131489101112131411121314151617151617181920211516171819202118192021222324222324252627282223242526272825262728293031293031……5.calenda模块26month()函数:生成某年某月的日历。>>>print(calendar.month(2018,5))#输出2018年5月的日历
May2018MoTuWeThFrSaSu12345678910111213141516171819202122232425262728293031isleap()函数:判断某年是否为闰年。>>>calendar.isleap(2014)False>>>calendar.isleap(2018)False>>>calendar.isleap(2016)True5.calenda模块27
sys模块是和Python解释器关系密切的模块。前面已经使用过了sys.path属性及sys.path.append()方法。可以通过sys.__doc__查看sys库的文档,以便全面了解sys模块。path属性:用于记录Python中已经安装库(模块)的路径,以列表的形式进行存储>>>importsys>>>sys.path#显示当前的值['','C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\Lib\\idlelib','C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip',……]>>>type(sys.path)#查看sys.path的类型<class'list’>path是列表类型,通过dir(sys.path)可以查看其具有的方法。如前述已经用过的append()方法,添加一个路径到列表中。6.sys模块28exit()函数:退出当前程序,一般用于主线程的退出,退出时,会抛出SystemEixt异常,这个异常如果通过捕获代码进行捕获,则进入异常处理程序,否则终止程序的执行。>>>foriinrange(5): ifi==4: sys.exit() else: print(i,end=’’)0123上述代码可以看到,当i等于4时,执行sys.exit()退出程序。通常情况用exit(0)表示正常退出,exit(1)表示异常退出。6.sys模块29
urllib模块是用于对URL进行处理的,爬取网页时,经常使用这个模块。Python3的urllib模块整合了urllib2等模块,因此包含有多个子模块。本教材重点介绍urllib.request子模块。导入urllib.request子模块>>>importurllib.request使用urlopen()函数打开网页>>>baidu=urllib.request.urlopen("")>>>type(baidu)<class'http.client.HTTPResponse’>打开网页后,变量baidu的类型为:http.client.HTTPResponse。7.urllib模块30
读取网页的内容
网页的读取和文件的读取类似,都有read()、readline()和readlines()读取方法。read()是读取全部内容,readline()是读取一行内容,readlines()是按行读取全部内容。>>>html=baidu.read()#将baidu网页的内容全部读取到变量html中>>>type(html)#可以看到html的类型是bytes<class'bytes'>#输出html的内容,看到的是编码后的字节形式网页文件内容,较难看懂>>>print(html)b'<!DOCTYPEhtml>\n<!--STATUSOK-->\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\……7.urllib模块31对网页内容进行解码将网页的字节编码,解码成原始字符本身。采用decode()函数。>>>file=html.decode('utf-8')>>>print(file)<!DOCTYPEhtml><!--STATUSOK--><html><head><metahttp-equiv="content-type"content="text/html;charset=utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=Edge"> <metacontent="always"name="referrer">……通过解码,可以看到输出的完全是html格式文件。7.urllib模块与decode()对应的编码函数是encode()。需要注意编码与解码的编码格式要一致。常见的编码格式有:UTF-8、GBK、GB232、ASCII等。模块与包应用精选案例0433【例6-1】利用calendar和datetime模块,计算当前日期之后第38天的星期、日期和所在月的日历。分析:datetime模块是用来处理日期和时间的,calendar模块主要针对日历进行处理的。根据当前日期,计算得到38天后的日期,然后再生成当月的日历。datetime模块里有一个timedelta()方法,用于产生一个时间间隔。#eg6_1.pyimportdatetimeimportcalendar
#生成当天的时间和日期today=datetime.datetime.now()#计算38天后的时间和日期t_38=today+datetime.timedelta(days=38)#输出日期、星期、日历print("38天后是:",t_38.day,"号")print()#生成日期对象date_38=datetime.date(t_38.year,t_38.month,t_38.day)#获得星期print("38天后是星期:",date_38.isoweekday())print()print("日历\n")print(calendar.month(t_38.year,t_38.month))模块与包应用精选案例如何编写一个具有阴历的日历程序34
#eg6_2.pyimporttimet_start=time.time()sum=0i=0whilei<100000000:sum+=ii+=1t_end=time.time()t=t_end-t_startprint(t)模块与包应用精选案例每次运行的时间都一样吗?在不同的机器上运行呢?为什么?35【例6-3】猜数游戏。由系统随机产生一个0~100之间的整数,玩家可以进行5次竞猜,如果猜对了,则提示“恭喜你,猜对了!”,并结束游戏;猜错了,给玩家一个方向提示,告诉玩家是猜大了还是猜小了。分析:本题第一要解决的问题是产生一个0~100之间的随机整数;第二要解决的问题是提供5次机会;第三是判断是否猜对。对于第一个问题,调用random模块的随机函数randint()来产生一个随机整数;对于第二个5次机会的问题,采用循环来实现;第三个问题,判断是否猜对,则用if语句即可。#eg6_3.pyimportrandom
#产生一个随机整数num=random.randint(0,100)#确定可以猜的次数times=5#循环times次foriinrange(times):x=int(input("请输入你猜的数字:"))ifnum==x:print("恭喜你,猜对了!")breakelse:ifnum<x:print("猜大了!")else:print("猜小了!")else:print("猜数结束了!")print("要猜的数是:",num)模块与包应用精选案例至少多少次确保能猜对所给的数?36【例6-4】请编程遍历某文件夹。os模块的walk()方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的需求。walk()方法返回的是一个三元组(root,dirs,files),其中:(1)root指当前正在遍历的这个文件夹本身;(2)dirs是一个list,内容是该文件夹中所有目录的名字(不包括子目录);(3)files也是一个list,内容是该文件夹中所有的文件(不包括子目录)。#eg6_4.pyimportos#生成遍历目录的三元组treetree=os.walk("d:\\dd")#遍历treeforroot,dir,fileintree:#遍历file文件forfinfile:#将文件与目录连接print(os.path.join(root,f))#遍历dir子目录fordindir:print(os.path.join(root,d))模块与包应用精选案例你怎么理解Python自带了很多库?另外,目前支持Python的第三方开源库达6万多个,这是为什么?这些开源的库,需要保护知识产权吗?37【例6-5】编写一个模块,包含数学中的求平方、求绝对值、判断素数三个函数的定义,且这个模块可以独立运行并输出一个数的平方、绝对值及是否是素数。分析:模块中定义三个函数,并且此模块可以独立运行,即有if__name__==’__main__’:的判断语句。#eg6_5.pyimportmath
defsquare(x):y=x*xreturny
defabs(x):ifx<0:return-xelse:returnx
defprime_judg(x):ifx<0:returnFalse#由于range()不包含终值,所以要加1foriinrange(2,int(math.sqrt(x))+1):ifx%i==0:breakelse:returnTruereturnFalseif__name__=='__main__':x=float(input("请输入一个数:"))print("%.2f的平方是:%.2f"%(x,square(x)))print("%.2f的绝对值是:%.2f"%(x,abs(x)))print("%.2f是否是素数:"%(x),prime_judg(x))模块与包应用精选案例通过日历的设计与实现,掌握Python模块的使用方法、菜单程序的编写,熟悉datetime、calendar等模块。附加项目--日历训练目标训练内容本日历要求具有:①显示当天的日期和当前的时间;②能根据用户输入的年份显示年历;③能根据用户输入的年份和月份显示月历;④能根据用户给的日期间隔计算相应的日期。日历训练步骤①设计分析
根据要求,本日历具有4个功能,为方便用户的使用,此4项功能采用菜单的形式供用户选择。菜单形式如图所示,每个功能用一个函数来实现。程序是循环显示菜单,等待用户的选择,当用户选择某个菜单项,则调用相应的函数,相关函数执行完之后,继续显示菜单,直到用户选择“0:退出”项才会结束程序的运行。②功能模块规划menu()函数的功能是显示菜单;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 标准化MDT在肿瘤多学科转诊中的衔接
- 门诊护理工作制度及流程
- 临县《鞋类设计师》岗位冲刺押题卷
- 外科管道护理中的细节管理
- 医学26年:抗感染药物选择要点 查房课件
- 第3课 发言举手耐心等说课稿-2025-2026学年小学心理健康二年级下册教科版
- 26年靶向药肾损分级处理指南
- 医学26年:肝硬化食管胃底静脉曲张 查房课件
- 胃肠减压与肠内营养支持
- 医学26年:心血管疾病急救科普要点 心内科查房
- 雨课堂学堂在线学堂云《运动训练基本原理与方法(北京体育大学 )》单元测试考核答案
- DZ∕T 0214-2020 矿产地质勘查规范 铜、铅、锌、银、镍、钼(正式版)
- MOOC 创业基础-暨南大学 中国大学慕课答案
- 潍坊护理职业学院辅导员考试题库
- 加油站夏季安全教育内容
- 美容整形医院行政管理制度汇编
- DB11_T1831-2021 装配式建筑评价标准
- 剪纸与折纸活动记录表(共3页)
- 合肥市绿化施工导则
- 唐钢钢材材质单(共2页)
- 医院医务人员劳动合同
评论
0/150
提交评论