python简单介绍如何导入与使用模块中os模块常用的变量有哪些呢?

在这里跟大家分享一个Python编程过程中的知识点——os模块!

OS模块是python内建模块,OS模块主要定义了大量的处理文件和目录的方法,还包含普遍的操作系统功能。
如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。

笔者跟大家分享一个福利!下单时输入优惠码csdn66,立减20元,券后仅需99元!

扫码入Python技术交流群,可免费听技术讲座+领学习资料+视频课免费看!

大家好,这是一个简易的MAYA PYTHON学习教程。简易教程的目的是可以让更多的人快速掌握这些知识,而不是拘泥于理论的研究。最好的学习方式无疑是实践,我会提供简单实用的代码来帮助学习者了解脚本的实际运用。如果你是初学MAYA PYTHON,特别是非程序员的初学者,不妨先看一下下面的内容,以帮助你对MAYA PYTHON有一个大致的了解。为什么要学习简易教程?简易教程的特点就是尽可能做到简单,容易理解。我的文档会涉及到尽可能多的内容,但不会说的很深。因为很多复杂的应用往往是许多简单部分的组合,学会如何组合是更重要的事情:)另外,任何学习都需要一个很好的getting started,好的入门,往往决定今后深入学习的质量。万事开头难,但是一个好的开始,就是成功的一半。希望我的简易教程可以带大家进入MAYA PYTHON的大门。这个文档的适用人群是哪些?
·
具有一定MAYA操作经验,但无编写脚本经验的用户
·
具有一定MEL基础的用户
·
始终徘徊在MAYA脚本门口,但找不到切入点的初级用户什么是MAYA PYTHON是一门简单易学,但功能又非常强大的编程语言。(我会在下一篇中提供简单实用的PYTHON入门教程) 为什么要学习MAYA PYTHON大幅度地提高工作效率挖掘MAYA隐藏功能,更全面地掌握MAYA快速开发脚本插件
PYTHON
最好的方法是学习别人写的源代码。而最好的代码资源其实就在你的电脑里:你的MAYA帮助文档。如果你有良好的英语阅读能力,这样你可以充分理解帮助文档里所说的内容。但是如果英语能力不是很理想的朋友也千万不要着急,我的文档会帮助你学习MAYA PYTHON。另外,MAYA的帮助文档中的脚本部分对每条命令的参数以及每个节点的属性解释的都非常详细,个人认为,学会使用MAYA的帮助文档是学习PYTHON脚本的制胜法宝。
PYTHON
 (
点击标题阅读全文)如果你是PYTHON高手,可以跳过这篇:)因为节下来我要讲述PYTHON的基本应用。由于我的PYTHON教程主要是针对MAYA的应用,所以PYTHON基本应用的介绍主要会涵盖MAYA环境中经常会使用到的PYTHON功能。学习过程中,尽量运用已学到的知识自己也试着编写一些代码,发挥主观能动性。这样学习,效果会十分显著。该篇主要含盖以下内容:
MAYA
界面中有2处地方可以编辑PYTHON脚本,一处是左下角的快速命令行,这个命令行可以在PYTHONMEL间快速切换,如下图:
一处是右下角的Script Editor按钮,点开窗口如下:
我们的PYTHON代码就是写在PYTHON选项卡中,如果PYTHON脚本在MEL选项卡中执行将会出错,vice versa我们在MAYA中执行的操作会通过MEL语言打印在上面灰色区域,也就是输出区域。这些MEL语言都可以非常快地转化成PYTHON代码。这个数据输出区域同时也会打印PYTOHN脚本的执行结果以及出错信息。
现在我们来执行一条简单的PYTHON语句,来一个初体验:PYTHON页面中输入print "hello Yongbin被打印出来了。命令执行成功。但是我们发觉PYTHON页面里的代码也消失了。如果需要反复执行代码,可以选中需要执行的代码,然后按小回车,这样,我们可以在执行代码的同时保留页面里的代码。(建议使用第二种方法执行代码) 接下来,再举个简单的例子来说明输出窗口中的报错信息。随意在命令行中输入一些字母HuYongbin,然后执行,出现如下信息:
#
这是个简单的报错信息,说明HuYongbin没有被定义,电脑无法识辨。这条命令是无效的。最后就是#符号,#后的所有的代码(换行前)都被看作注释,不参与运算。例如:
)
虽然也是print命令,但是前面有#,所以无视。现在我们终于知道如何在PYTHON中执行代码,以及辨别代码是否有效。在下面的教程中,我将会用一些简单的实例来展示PYTHON的常用功能!
2.2 PYTHON
常用数据类型和操作符数据类型就是数据的类型- -U,就是不同类型的数据,数据类型包括:整型,浮点,字符,列表,元组,字典。 整型(INT)就是整数,比如:13211000……浮点(FLOAT)就是带小数点的数字,比如:1.124.5……
操作符,形象的说就是用来操作数据的工具,包括数学操作符,比较操作符,逻辑操作符。 数学操作符:+(加) -(减) *(乘) 假设第一种情况,注意要用冒号

else: # 假设第二种情况,注意冒号

adult",因为假设第一种情况是成立的。这里提一提代码缩进,缩进就相当于写作文时每小节开头要空2字;代码缩进,就是指被缩进的代码是上一行代码的子代码。

运行结果是打印"Hello,tom""==""="的区别是:"="相当于是个动词,把"tom"这个字符值传递给变量name"=="表示一种状态。if name=="tom"这句话翻译成人类的语言就是:假设name的值等于"tom"这个状态是成立的。(一旦成立就执行后面的语句……

else: # 如果两种假设都不成立的话……就执行下面的语句

运行结果是"a>1"。很显然,a不小于1,也不等于1,那就只有执行else后面的语句了。
for
语句的操作对象一般是一个序列,对序列中的每一个成员进行操作,举例:
for i in seq: # for
即将对列表seq中的每个成员进行操作,成员我们用i来代替(这里成员变量可以自定义)

操作范围:[02468]

将会被[02468]中的每一项依次替代,替代后再执行print语句。

这里我们用def命令定义了一个函数名字叫MyFirstFunction,后面括号里面是用来填写参数的,如果没参数,就留空。定义函数内的代码需要缩进。如果要执行函数,操作如下:
function"
,说明定义函数内的代码被正确执行了。函数还有一种定义方式,就是在括号里加上一些参数:

实战演习 (点击标题阅读全文)在上一篇中,我主要介绍PYTHON的一些基础知识以及常用语法。在这一篇中,我们要结合MAYA中的命令来编写一些基本PYTHON脚本。其实在上一篇接近尾声的时候,我已经举例了如何导入模块的方法,这是真正使用PYTHONMAYA中编写脚本的第一步。
这里应该不用解释了吧,有疑问可以看第二篇的结尾"模块"部分。:)这里顺便提一提,as mc可以用任何名词来代替,as cc也可以。这样,如果要调用polyCube()命令的话,就必须有cc.polyCube()作为前缀。基于笔者的个人习惯,我们这里还是用mc
MEL
命令和PYTHON命令之间的转化我们导入MAYA的模块,现在要运用模块中的命令编写一些东西了。但是大家可能会很疑惑,写什么呢?我们总不见得整天在MAYA里做小学数学题吧- -现在我们需要学习一些MAYA的实用命令(比如上一篇提到的polyCube()创建一个立方体),学习实用命令的最好的途径是通过执行手动操作命令来获取MEL命令语句,然后把MEL命令转换成PYTHON命令。比如我们在MAYA3D视图中用传统的方法建立一个polygon的立方体,我会在脚本编辑器的输出部分得到以下输出信息:
//
注意大小写这是一句MEL命令,描述了如何创建一个PolycubeMEL命令的结构十分简单,开头的polyCube就是这句MEL命令的主命令,后面的部分全部是参数。其中,带"-"的,是参数名称;没有"-"的,是该参数的值。一般都是一个带"-"号的参数名称,后面再跟一个不带"-"的值。有时后面会不跟值,这说明这个参数不需要值,它只是一个开关,带这个参数,说明这个开关开着,不带说明关着。现在,我们就把这句MEL命令转换成PYTHON可以执行的命令(我们暂时不去理会具体参数的作用,只是学习一个转换过程):
cuv=4)
执行代码后同样得到了一个立方体。我们对比一下,可以发现PYTHON可以完全把MEL的命令转化过来,只是格式不一样。格式不同体现在一下几点:
·
mc前缀(MEL没有前缀)
·
所有的参数信息需要放在主命令后的括号中(MEL没有括号)
·
参数名和它的值之间用等号隔开(MEL是用空格)
·
每个参数之间用逗号隔开(MEL用空格)
·
有些参数的值是1,而MEon关于最后一条,其实MELon也可以写成1,原因是,在PYTHON(包括其他程序语言),1这个值往往表示True,on等肯定意义的值,而0则表示False, off等否定意义的值。这样的值叫做布尔值(boolean),这种数据类型只有2种答案要么1,要么0;要么真,要么假;要么ON,要么OFF。例子中的1就是on,说明这个参数是可用的。
关于布尔值(其实你在MAYA中也可以把它理解成一个开关),以后还会讲到它的用法。节下来我们举一反三,熟练掌握MAYA命令转换的方法。 拖一个球出来,得到以下命令:
r=3)
还有一中转化形式:我们如果在场景中选择了pCube1这个物体,会得到以下MEL命令:
pCube1;
这里我们就不能写成mc.select(r=pCube1)了,因为现在这个命令基本上属于一个动作,一个动词,既然是动词,就必须有一个动作施与的对象,这里这个对象就是pCube1,而r这个参数其实replace的简写。注意这个r不是布尔值,它没有任何数据类型,只是一个开关而已。在MEL中,这个开关是不需要值的,但在PYTHON中,需要像布尔值那样给一个1的值,表示这个开关开启:
#
注意名字的数据类型是字符,所以必须有双引号如果要同时选择pCube1pSphere1的话,需要用到列表,如下:
# r
参数在这里我就不加了,但是不影响执行,体会下"可选"的作用
读取场景中信息的常用命令:刚才我们知道了一些如何创建物体,以及如何选择物体的PYTHON命令。下面咱们要学习如何准确获取场景中你想要得到的信息,对于即将要编写的代码而言是十分重要的。比如,你要用命令对"所选的顶点"进行操作,那你就必须先要得到这些顶点信息,比如,这些点的ID号是那些?同样,如果要对"所选的MESH"进行操作,那你至少得让MAYA知道是哪些MESH
得到所选物体的名字列表那我们先来得到所选择的物体信息吧,这里用到一个新的命令ls(我这里提到命令绝对是常用的)
sl=1
表示,我们要列出sl(select)的信息,"=1"就是一个开关,我们打开了它。执行后,我们会从输出框中得到一个列表:["pCube1","pSphere"]。假如我们把第2行命令的结果赋予一个变量,那这个变量将继承这个命令执行的结果,如下:
sel
我们同样会得到["pCube1","pSphere"]这个结果,并且我们保存了这个列表结果到sel变量中去。假如你选择了N个物体,那你执行这句命令后会得到N个物体的列表。
得到和设置物体的属性getAttr()setAttr()下面再介绍2个非常有用的命令,getAttr()setAttr()。前面那个是得到节点属性,后面那个是设置节点属性。我们同样可以借助MEL命令来获取一些命令信息。
3.3
帮助文档的使用(灰常重要!) 有的人可能回问:我如何才可以知道,一个操作命令有多少个参数可以使用?一个节点到底有多少个属性可以设置?接下来我会给大家介绍下MAYA帮助文档的使用方式。 Documentation(技术文档),在这个技术文档中,我们需要用到的,就是CommandsPythonNodesCommandsPython中包含了所有MAYA中的PYTHON命令以及其参数的使用方法;Nodes列出了MAYA中所有的节点以及其属性的用法。
现在我们列举一个xform命令来了解如何结合帮助文档来完成你的操作
substring
中输入xform命令,在下面出现的SubString列表中选择xform,我们就可以进入xform命令页面。我们把该页面往下拖,跳过NotesRelated的内容,在Flags下有个长长表格,表格由3列组成:Long 这条语句中translation是一个参数,我们可以在Flags下的列表中找到这个参数,我们观察它的长名(缩写)一列,translation后有一个(t),这个(t)就是他的缩写,我们可以用缩写来替代长名,如:mc.xform(q=1, t=1),效果完全一样。数据类型就是这个参数所支持的数据类型,如果它的数据类型是Int的话,说明它只能支持整数,你只能把整数作为它的参数,或者在询问时只能得到整数的输出。同样如果是个boolean值的话,它只能支持01
属性指的是这个参数的性能。这里的性能有4种,在MAYA帮助文档中用这4个字母表示:
   
。其中C表示这个参数可以在该命令执行操作的时候使用;Q表示这个参数可以在询问状态下使用;E表示这个参数可以在编辑状态下使用;M表示这个参数可以拥有多种数据类型。一般情况下,C t=1)这句命令就是典型的询问状态Q,询问内容是t,也就是translation
Nodes
信息现在我们进入Nodes页面来了解下如何使用MAYA节点中的属性。
Nodes
页面中所罗列出来的其实是MAYA中的所有节点类型。MAYA中充满着节点,我们任意选种场景中的某个节点,它都是属于某个Nodes页面中所罗列出来的类型。比如,我们选择之前在场景里创建的pCube1,它是属于什么类型的节点?是pCube节点吗?不是,我们无法在Nodes页面中搜索到。我们可以通过以下命令来询问节点的类型:
objectType
命令可以得到节点类型,实用推荐!执行后,得到结果:transform。说明pCube1这个节点是transform节点。同样,我们询问:
得到节点类型后,我们到Nodes页面,输入transform。找到transform,点入。找到Attributes下的长长列表。我们可以看到transform中有的参数。这些参数都可以通过getAttr()setAttr()来获取和设置。我们来做下测试吧:)
rz
就是rotationZ的缩写返回0.0,我们就得到了他的信息了。关于文档使用的小结:其实我平时用的比较多的还是CommandsPython命令查询页面,因为在场景中很难找到命令及其参数的完整信息(当然,我们可以通过输出窗口中的MEL记录,但这些信息远远不够……)。关于Nodes,当我们需要知道某个节点的类型时,可以用到objectType来查询;或者当我们需要得到节点中某些属性的时候,也会用的到这个页面。
3.4
一个简单的脚本实例这一节中,我要结合前三篇所讲的一些知识来作一个综合的小范例,并加上适当的注解,以便学习。

这个量是这个函数的h参数乘以这个for循环的成员变量i先执行以上这写代码。现在我们在场景中创建一个立方体,然后按Ctrl+D水平复制出若干个成一直线,全部选中这些立方体。如下图:
执行height函数后,发现这些立方体的高度会发生一些变化,形成一斜线。并且,height的斜率会根据h的值的不同而不同。 代码的简单分析:代码的结构不是很复杂,只有5行,前面3行应该不用作过多的解释,应该是很好理解的。我主要分析下最后的2for循环语句。(看下面的文字时请注意对照源代码)
就等于range(0,5),也就是[0,1,2,3,4]这样一个列表。所以说成员变量i的取值范围就在这个列表中,i将逐个被列表中的每一个成员替代。
第二行for:由于i5个值可以取,所以setAttr会执行5次,每次执行时,就会把range范围列表中的值代入i。比如,当i=0的时候,sel[0]就是指范围列表中的第一个值,也就是"pCube1"sel[i]+".ty"指的就是"pCUbe1.ty",也就是pCube1Y轴的移动值;h*i指的就是这个移动值的具体数字,其中i是在这里就是0h的值取决于你在调用函数时在参数中所输入的数字,把整句话连接起来就是:当i=0时,并且h=2时(h值在我们调用函数时得到),执行mc.setAttr("pCube1.ty", 2*5)pCube5Y的位移值等于10如果你有一定编程经验,相信这些代码理解起来不会很困难。如果你是初学着,建议多练习for循环语句的使用,多尝试自己写一些代码,得以巩固。在下一篇中,我们会有更多的代码演示及其分析,进入实战。
实战篇
 (点击标题阅读全文)上一篇,我们结束了演习,在这一篇中,我们将进入实战!我们将学习写一些实用的代码,以使我们的工作高效化。作为简易教程,我的范例代码的难度不会很大,学习者也可以触类旁通,重组这些简单的"零件",发挥自己的"组合能力"。其实这个世界上真正复杂的"东西"很少,但是复杂的"组合"却是很多。复杂的"组合"往往需要自己创造,发挥自己的想象力吧。
自制吸附工具事实上,MAYA自己也有吸附工具,可以吸附很多场景中的元素。我们下面的代码的主要是用来吸附中心点位置的。在MAYA场景中,如果遇到有很多物体时,MAYA自带吸附功能可能会有点不太好使(会吸到别的物体)。但也有可能是我MAYA掌握不全面- -U。(事实上,操作上我更习惯MAX,因为学的比较早,但从软件结构上,更偏爱MAYAOK,不废话了,先看看下面的代码吧:
#
执行代码前,请大家在自己的场景里建2个物体(任意),我这里是pCube1pSphere1

先执行以上代码,什么也不会发生,因为我们现在已经定义了一个函数,这个函数叫snap,接下来,我们要执行这个函数了。先选pCube1,然后按Shift加选pSphere1,执行函数:
snap()我们看到,pCube1的位置完全移到pSphere1的位置上去了。如果我们撤消操作,先选pSphere1,再加选pCube1,执行函数后结果就成了pSphere1的位置完全移到pCube1的位置上去了。这里我们看到选择的顺序对最终的执行结果形成了直接的影响。所以我们先要测试MAYA中的选择顺序和mc.ls(sl=1)命令之间的关系。再次选pCube1,然后按Shift加选pSphere1,然后执行:
如果我们想要把后选的物体作为目标位置的话,那我们就要获取后选物体的位置信息:pos=mc.xform(selection[1], q=1, t=1, ws=1)。我们再次用到了询问开关qt就不用多说了吧,如有疑问可以参考上一篇3.3.1ws(worldspace)是世界空间的意思,打开ws说明你所要获取或设置的参数是基于世界坐标的,而不是局部坐标(可以在帮助文档中找到)。这样我们就把后选的那个物体selection[1]的位置信息记录到了pos变量里。
扩展:由于字数限制,扩展部分介绍请参阅我的博客:
4.2
自制重命名工具:
MAYA
自带也有类似的工具。但是功能比较简陋,我们可以自制一个功能更强的重命名工具。先看下代码吧:

我们先执行以上代码,这样就定义了addpre()函数,然后我们选中刚才创建的pCube1pSphere1,执行该函数,如下:
定义函数中,我们增加了pre变量作为该函数的参数,用来输入你需要的前缀字符。函数主体中第一行大家应该明白,这里就不多说了,主要还是稍微解释下for循环。
for
循环的范围是你的选择范围selection,不管selection列表里多少值,都是循环范围。每次循环所执行的语句是mc.rename(i, pre+i),其中rename是重命名的命令,我们可以通过手动给物体重命名,在MEL输出窗口得到MEL命令,然后转成PYTHON;或者到帮助里查找,这里我推荐第一个方法,因为比较快捷。rename中有2个参数,第一个是要rename的原始名字,第二个是修改后的名字。iselection列表里的的每个成员,也就是你所选择的物体。
执行命令后,for循环会逐个对你所选的每一个物体执行rename命令:把i(原始名字)变成pre+i。其中pre是一个预设的变量,在调用函数的时候pre需要被设定成一个字符,比如:addpre("prefix_"),这样pre就等于"prefix_"了,那pre+i就等于在原始名字前加上一个叫做"prefix_"的字符。
扩展:由于字数限制,扩展部分介绍请参阅我的博客:
4.3
对文本进行操作这里我写个小小的实例,这个实例可以将当前所选择的物体的位置坐标导出成文本文件。接下来,我们在脚本编辑器中输入以下代码:
for i in sel: #
获取每个选择物体的名字和它的位置信息

f.close()然后我们在视图中创建3个立方体,然后随意放置他们的位置,如下图: 最后全选上面的代码,按小回车执行它们,完了我们打开资源管理器,找到D盘的根目录下,多了一个叫posInfo.txt的文件,打开它,可以看到文本文件的内容,如下: 这个文件记录了我们所选择的物体的坐标位置信息。现在我为大家分析以下这段脚本,谈谈我对写类似脚本的思路: 首先我先要想,我如果要记录一个文本文件要记录哪些信息?这里作为范例,我只记录最简单的信息,那就是:所选物体的名字,以及该物体的XYZ位置信息。所以这里创建了一个空的列表Info,然后使用for循环对每一个所选择的物体进行getAttr(),以获得它的XYZ位置坐标,然后把[物体的名字,坐标X,坐标Y,坐标Z]以列表的形式给一个临时的变量iposInfo,把每个物体的iposInfo再添加给Info列表。这个时候,Info得到的数据应该是这样的:
现在我们以列表的形式暂时保存了想要储存的数据,这个列表叫做Info然后我们需要用到PYTHON的文件读写命令open()和写入命令write()。但是写入文本文件的数据类型是字符,所以我们需要把列表转成字符,而且是带格式的字符,因为带格式的字符可以方便我们浏览文件。这里我们再次使用了for循环,我们对Info列表进行循环,把列表中的信息以特定的格式累积到空字符info_str中去,最后把info_str写入文本。
扩展:由于字数限制,扩展部分介绍请参阅我的博客: 一些隐藏的命令由于字数限制,部分内容介绍请参阅我的博客: PYTHON中使用MEL语句由于字数限制,部分内容介绍请参阅我的博客:
界面篇
 (点击标题阅读全文)学习写界面的最好方法是看帮助文档,帮助文档里拥有大量的学习资源!并且大多都很实用。我基本就是直接把帮助文档里的范例直接拿过来用,然后修改其中的参数,边改边学。这里我基本也是拿来主义,在接下来的篇幅中,我会选择性地解释一些基本控件的用法。
5.1
按钮和文字按钮和文字是界面中常用的元素,接下来我们先尝试用最简单的代码来生成一个带按钮的界面。
mc.showWindow()
执行后看到一个只有一个按钮的窗口 点击按钮什么也不会发生。接下来我们在mc.button()中添加一些参数:
看到窗口中按钮上的文字变成了label参数后的值。接下来我们继续添加参数:
接下来,我们要让这个按钮执行些命令,比如打印一句话:

Me按钮,看到所选的几何体的名字前全部自己加上了default。当然你也可以把默认defualt删除,打入任何字符,这些字符将成为所选物体的前缀。 -->
相信addpre()函数大家应该很熟悉了吧,在上一篇中我介绍过,接下来我分析一下textField命令的用法。
mc.textField(tx="default")
就是创建一个文本输入框,其默认值是一个字符"default"。我们把定义了的输入框赋予一个具体实例a,因为我们在之后要用到这个实例。一般来说,如果控件需要用到询问模式(q)和编辑模式(e),都要指定一个具体实例,这个具体实例为之后的编辑提供了具体的操作对象。
tx=1)
表示询问实例对象a关于参数tx的值(这里tx是默认的,你也可以通过改变输入窗口中的默认值来得到新的tx值);然后我们把这个值赋给了变量b;最后把这个得到的变量b的值填入addpre()函数的pre预设变量,并且执行addpre()函数。这样我们就把tx的值加在了所选物体的前面。
所以整体流程就是:在输入窗口输入文本;按Press Me,看到输出窗口返回dog。可见,选项菜单中选什么,点Press Me后就打印什么。原理很简单,和上文提到的输入窗口类似,我们在定义选项菜单时要注意设置一个实例o,以便之后再获取菜单中的值。 v=1)的意思就是询问实例ov参数,v参数就是value的意思,也就是指当前optionMenu的值。把获得的值给a,然后打印a
5.4
列表框接下来,我结合选项菜单来写一段简单的有关列表框的代码:

step=1)表示对进度条值的修改,注意edit=True,等同于e=1step=1表示,每执行一次,进度条前进一格。一般在for循环里用进度条比较多,我一般惯用格式如下:
for i in alist: #
假定有个列表叫alist执行命令 # 这只是一个例子,大家可以自己代命令进去

这样,每作一次循环,进度条就会前进。
5.6
勾选框勾选框是可以任意勾选自己想要的选项这么一个UI控件,示范代码如下:

我要回帖

更多关于 python简单介绍如何导入与使用模块 的文章

 

随机推荐