python学习个人笔记_第1页
python学习个人笔记_第2页
python学习个人笔记_第3页
python学习个人笔记_第4页
python学习个人笔记_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

环境搭建:Windows上安装文件名:2exe-0.6.9.win32-py2.5.exe1、python生成exe文件1)先在机器上装python,我装的是python2.5(最好别用python2.6)2)从下面网站下载并安装py2exe-0.6.9.win32-py2.5.exe/projects/py2exe/files/3)转换h3c-analyse-log.py到h3c-analyse-log.exe编辑setup.py文件内容如下:fromdistutils.coreimportsetupimportpy2exeoptions={"py2exe":{"includes":["_strptime"],"bundle_files":1}}setup(options=options,zipfile=None,console=["h3c-analyse-log.py"],)运行下面2个命令D:\ProgramFiles\Python25>pythonsetup.pyinstallD:\ProgramFiles\Python25>pythonsetup.pypy2exe4)生成的exe文件就放在python2.5安装目录的子目录dist下,比如我的在:D:\ProgramFiles\Python25\dist下面。Linux系统上用的部分常用软件:pexpect程序安装说明Pexpect介绍:Pexpect是DonLibes的Expect语言的一个Python实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的Python模块。Pexpect的使用范围很广,可以用来实现与ssh,ftp,telnet等程序的自动交互;可以用来自动复制软件安装包并在不同机器自动安装;还可以用来实现软件测试中与命令行交互的自动化。安装步骤:将pexcept压缩包下载到根目录下(本文以pexpect-2.3.tar.gz为例)执行tarxzvfpexpect-2.3.tar.gz进入pexpect-2.3目录,执行python./setup.pyinstall[root@localhostst]#tarxzvfpexpect-2.3.tar.gz[root@localhostst]#cdpexpect-2.3[root@localhostpexpect-2.3]#python./setup.pyinstall说明:可通过运行pexpect-2.3/examples/下的范例验证pexcept是否已经安装成功。pylint安装说明pylint介绍:Pylint是一个Python代码分析工具,它分析Python代码中的错误,查找不符合代码风格标准(Pylint默认使用的代码风格是PEP8,具体信息,请参阅相关参考资料)和有潜在问题的代码。我们使用的是最新版本的pylint0.21.3。安装步骤:Pylint可以用于所有高于或者等于2.2的Python版本兼容。需要logilab-astng(version>=0.14)和logilab-common(version>=0.13)的包,如果是Python版本低于2.3,那么它还需要optik包(本文接下来的示例暂不考虑这种情况)。下载Pylint、logilab-astng(version>=0.14)和logilab-common(version>=0.13)的包,使用tarzxvf*.tar.gz解压缩这些包。依次进入logilab-astng、logilab-common和Pylint解开的文件夹中,运行命令pythonsetup.pyinstall来安装。安装完成后,就可以通过pylint[options]module_or_package来调用Pylint了。具体使用方法可以使用pylint–h命令查看帮助信息。通常情况下,可直接使用pylintmodule_or_package进行检查。paramiko安装说明paramiko是一个python的扩展模块,实现了基于SSH2协议的远程主机连接。在使用python脚本对被测设备进行ssh连接时使用起来比较方便。下面是安装步骤:获取pycryto(paramiko需要依赖此模块)的安装包,使用tarzxvf*.tar.gz解压缩之后运行pythonset.upinstall可以完成安装。获取paramiko的安装包,解压缩之后传到测试环境上,进入目录运行pythonset.upinstall完成安装。注意:请在linux内核版本为2.6.32的测试环境上安装,否则可能出现兼容性问题范例:#!/usr/bin/python#-*-coding:cp936-*-'''Filename:lun_create.py'''importosimportreimportst_sshimportst_logimportst_statimportst_commonimportst_confimportlun_common#==========================================================================#InitializingLogandReport.#initlog(level,name,path):#level:"base","extended","advanced"#name:log_namemustbelog_Filename,report_namecanbereport_Filename.#path:"st_conf.HOME_PATH/storware_st/log/st_log_","st_conf.HOME_PATH/storware_st/log/st_report_"#==========================================================================#Initializinglog,log_namemustbe"log_+Filename"LOG_LEVEL="base"LOG_NAME="log_lun_create.py"LOG_PATH=st_conf.HOME_PATH+"storware_st/log/st_log_"LOG,LOGFILE=st_log.init_log(LOG_LEVEL,LOG_NAME,LOG_PATH)#Initializingreport,report_namemustbe"report_+Filename"REPORT_LEVEL="base"REPORT_NAME="report_lun_create.py"REPORT_PATH=st_conf.HOME_PATH+"storware_st/log/st_report_"REPORT,REPORTFILE=st_log.init_log(REPORT_LEVEL,REPORT_NAME,REPORT_PATH)#ST_TEST_CASE_BEGINST_LUN_CREATE_001defST_LUN_CREATE_001():'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''用例ID:ST_LUN_CREATE_001测试项:创建LUN成功用例标题:用类型为raid5的raidgroup部分空间创建LUN成功(GB为单位)重要级别:H预置条件:1、要创建LUN名之前不存在2、LUN所依赖的RAIDGROUP存在,其大小为250GB,类型为raid5输入:1、luncreatename=lun0rg_name=rg1chunk_size=64lun_size=5GBsync=disable2、lunqueryname=lun0操作步骤:1、输入1有预期结果12、输入2有预期结果2预期结果:1、lun0创建成功,并记录info级别日志:”CreateLUNsuccessfully.”;命令行不打印任何信息;2、可以查询到此LUN信息,检查LUN创建时的默认值是否符合规格LUNinfo:#Name:lun0#Id:0#UUID:001151bf-00000001-16623588-1ea70eac#Status:normal#RAIDtype:raid5#RAIDGroupname:rg1#RAIDGroupUUID:001151bf-00000001-424b7b0f-0f5c977d#Capacity:5120MB#Rawcapacity:5120MB此项内容需要等到超级块做好后再检查实际值#Chunksize:64KB#Stripsize:128KB#Ownership:local#Sync/Rebuildstatus:unknown#Sync/Rebuildpercent:0%#Rebuildpriority:high#Syncpriority:high#ReadCachestate:enable#WriteCachestate:enable'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''try:#Definetestcase'snametest_case=r'ST_LUN_CREATE_001'#Beginlog,don'tmodifyst_log.st_begin(test_case,LOG)#[step1]Pre-conditioninitializationLOG.info('[step1]Pre-conditioninitialization')is_clear_once=Falseresult='ok'client=st_ssh.ssh_connect()#lun_common.lun_env_clear_all(client,LOG)ret=lun_common.raidgroup_create_single(client,'rg1','raid5','sata',LOG)ifret=='err':raiseException,'Failedtocreateraidgroup.'#[step2]TestedcommandcallLOG.info('[step2]Testedcommandcall')test_cmd='luncreatename=lun0rg_name=rg1chunk_size=64lun_size=5GBsync=disable'exe_res,content=st_common.exec_cli_command(client,test_cmd,LOG)ifexe_resisnotTrue:raiseException,content#创建LUN成功后延时1秒钟,因为创建过程中有异步事件需要处理st_common.wait_cmd_complete(1)#[step3]CheckresultLOG.info('[step3]Checkresult')#执行查询命令check_cmd='lunqueryname=lun0'exe_res,content=st_common.exec_cli_command(client,check_cmd,LOG)ifexe_resisnotTrue:raiseException,content#设置要检查的LUNinfo信息,default表示按正则表达式匹配,其它为精确匹配lun_info={\'lun_name':'lun0',\'lun_id':'0',\'lun_uuid':'default',\'status':'normal',\'type':'raid5',\'rg_name':'rg1',\'rg_uuid':'default',\'capacity':'5120MB',\'raw_cap':'default',\'chunk':'64KB',\'strip':'128KB',\'owner':'local',\'sync_stat':'default',\'sync_pct':'default',\'rbd_prio':'default',\'sync_prio':'default',\'rc_stat':'default',\'wc_stat':'default',\}iflun_common.is_lun_info_match(lun_info,content)isnotTrue:raiseException,'FailedtomatchLUNinfo.'#[step4]ClearenvironmentLOG.info('[step4]Clearenvironment')is_clear_once=Trueret=lun_common.lun_env_clear_all(client,LOG)#此处抛出异常原因在于清除失败后可由异常分支再尝试清除一次ifret=='err':raiseException,'Failedtoclearenvironment.'LOG.info('Clearenvironmentsuccessfully')exceptException,allerr_msg:LOG.info(allerr_msg)LOG.info('Clearenvironment')result='err'ret=lun_common.lun_env_clear_all(client,LOG)#如果是正常清理一次不成功导致的异常,再清一次可以成功的话用例通过#ifret=='ok'andis_clear_once==True:#result='ok'finally:#[step5]PrintreportLOG.info('[step5]Printreport')ifresult=='ok':REPORT.info("[PASSED]"+""+test_case)elifresult=='block':REPORT.info("[BLOCKED]"+""+test_case+st_conf.BLOCKED_SIGN)elifresult=='err':REPORT.info("[FAILED]"+""+test_case+st_conf.FAILED_SIGN)client.close()#Endlog,don'tmodifyst_log.st_end(test_case,LOG)returntest_case,result#EndofTestcase_ST_LUN_CREATE_001#Belowisusedtodebugdeftest():'''thisfuntionisusedfordebugging'''ST_LUN_CREATE_001()st_stat.result_parse(REPORTFILE)st_common.st_message('lun_create')#thisparametershouldbeFilename#copyreportforCIos.popen('cp'+REPORTFILE+''+st_conf.CC_ST_Log_Path+'report.txt')os.popen('cp'+st_conf.CONF_PATH+'user_st'+st_conf.CC_ST_File_Path)if__name__=='__main__':test()个人笔记:1.使用变量时只需要给它们赋一个值。不需要声明或定义数据类型。2.如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(;)来特别地标明这种用法。分号表示一个逻辑行/语句的结束。3.python有整形,长整型,浮点型,复数型四种类型。4.python中有自然字符标志,在字符串前面加上r或R这个标志,字符就不再转义,都是其本身的含义。例如r"Newlinesareindicatedby\n",这里就会输出\n,而不是转移为换行符。特别说明:python中的正则表达式中,如果想维持本身含义,可以在字符前面加上\维持本身意义,例如\\表示\。5.每个缩进层使用单个制表符或两/四个空格。6.python有逻辑行和物理行的概念,逻辑行指的是代码太长一行写不完,行末的单独一个反斜杠表示代码在下一行继续,而不是开始一个新的行。7.当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是局部的。这称为变量的作用域。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。8.只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参。例如,deffunc(a,b=5)是有效的,但是deffunc(a=5,b)是无效的。9.打印docstring的方法,print函数名.__doc__10.元组和列表十分类似,只不过元组和字符串一样是不可变的即你不能修改元组。11.你需要记住的只是如果你想要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单对象),那么你必须使用切片操作符来取得拷贝。如果你只是想要使用另一个变量名,两个名称都引用同一个对象,那么如果你不小心的话,可能会引来各种麻烦。12.在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行.13.大多数re模块函数都可以作为regex对象的方法。14.python脚本中打印是printa,c语言中是printf("%s","abc");15.test.pywearearguments,'test.py'是sys.argv[0]、'we'是sys.argv[1]、'are'是sys.argv[2]以及'arguments'是sys.argv[3]。注意,Python从0开始计数,而非从1开始。16.Python中有三种内建的数据结构——列表、元组和字典。17..*可以匹配任何字符串。可以匹配'123@!@##123asdfasdfsadf'18.re.M加上了这个,就说明"^"匹配字符串的开始和字符串中每行的开始;"$"匹配字符串的结尾和字符串中每行的结尾;19.python当中没有{}符号,是通过用相同的缩进来表示同一组语句的开始和结束。基本语法基本介绍Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发简单Python是一种代表简单主义思想的语言,阅读一个良好的Python程序就感觉像是在读英语一样,但是对格式Python还是严格要求的。Python的这种伪代码本质是它最大的优点之一,它使你能够专注于解决问题而不是去搞明白语法本身。易学Python极其容易上手Python有极其简单的语法免费、开源Python是自由/开放源码软件之一,简单的说,可以自由发布这个软件的拷贝、阅读它的源代码、对它进行修改、把它的一部分用于新的自由软件中。Python的优秀是因为由一群希望看到一个更加优秀的Python的人创造并经常改进着的。高层语言使用Python时,你无需考虑诸如如何管理程序使用的内存一类的底层细节可移植性各种不同的系统上都可以看到Python的身影,如果你小心避免使用依赖于系统的特性,那么你的所有Python程序就可以无需修改的在以下任何平台上运行。这些平台包括:所有Unix衍生系统(Linux,MacOSX,Solaris,FreeBSD等等)Win32家族(WindowsNT,2000,XP等等)早期平台:MacOS8/9,Windows3.x,DOS,OS/2,AIX掌上平台(掌上电脑/移动电话):NokiaSeries60/SymbianOS,WindowsCE/PocketPC,SharpZaurus/arm-linux,PalmOS游戏控制台:SonyPS2,PSP,NintendoGameCube其他解释性Python语言写的程序不需要编译成二进制代码。可以直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。由于不需要担心如何编译程序,如何确保连接转载正确的库等等,所有的这一切都使Python更加简单。面向对象Python面向对象编程为数据和逻辑相分离的结构化和过程化编程添加了新的活力。面向对象编程支持将特定的行为、特性以及和/或功能与它们要处理或所代表的数据结合在一起。Python的面向对象的特性是与生俱来的。然而,Python绝不像Java或Ruby仅仅是一门面向对象语言,事实上它融汇了多种编程风格。比TCL强大,支持“大规模变成”,能够开发大型系统比Perl语法简洁,更具可读性、更易于维护,有助于减少Bug比Java更简单、更易于使用比C++更简单、更易于使用,并且可以使用其进行扩展比VB更强大也更具备跨平台特性比Ruby更成熟、语法更具可读性作者:GuidovanRossum/研究过多种语言,从中吸取了许多觉得不错的特性,将它们熔于一炉1989年底创始于荷兰,起初作为一个打发时间的研究项目,目前已经得到广泛的应用简单、直观、强大开源,以便任何人都可以为它做贡献代码像纯英语一样易懂适用于短期开发的日常任务Python基本类型:整型int长整形long布尔型TrueFalse双精度浮点型double复数x+yj,其中x是实数部分,y为叙述部分字符串string数值运算:运算符:+,-,*,/赋值:=除了以上,还有幂运算**,取整除//,左移<<等等字符串Python中的字符串有很多种表示方法,可以使用单引号和双引号。例如“abcde”,‘abcde’字符串可以跨多行,用反斜杠“\”续行。hello=“abcdefgh\ajlsdjflajlksdjlgjasdg\djlfajlsdjflaj”字符串可以使用“+”运算符进行连接操作,用“*”进行任意次连接操作hello=“123456”hello=hello+“hello”hello=‘w’*5强制缩进Python的代码块通过缩进对齐表达代码逻辑而不是使用大括号,因为没有了额外的字符,程序的可读性更高。而且缩进完全能够清楚地表达一个语句属于哪个代码块。当然,代码块也可以只有一个语句组成。注意:相同层次的语句前面的空格或制表符数量必须一致条件语句ifIf语句是选取要执行的操作,是Python主要的选择工具,代表Python程序所拥有的大多数逻辑If语句是复合语句,同其他符合语句一样,if语句可以包含其他语句条件语句ifPython中没有switch、case语句可以用多个if实现,或者对字典进行检索运算或搜索列表Python中的真值判断在数学运算中,Boolean值的True和False分别对应于1和0。真和假是每个Python对象的固有属性,每个对象不是真就是假数字非0,则为真对象非空,则为真比较和相等测试会返回True或Falseand和or运算符会返回True或False的操作对象三元表达式C?X:Y,或称三元运算符.(C是条件表达式;X是C为True时的结果,Y是C为False时的结果),Python中的实现语法为XifCelseY循环控制while事实它上是一个条件循环语句.与if声明相比,如果if后的条件为真,就会执行一次相应的代码块.而while中的代码块会一直循环执行,直到循环条件不再为真.while的一般格式循环控制forfor循环在Python中是一个通用的序列迭代器:可以遍历任何有序的序列对象内的元素for语句可以用于字符串、列表、元组、其他内置可迭代对象,以及用户通过类创建的新对象for的一般格式函数定义def关键字def用于函数定义,括号里的是形参表。函数体从下一行开始。函数体的第一条语句可以是说明性问题,即文档字符串,或称docstring。在代码中增加文档字符串是好习惯,应该尽量养成。序列序列类型有着相同的访问模式:它的每一个元素可以通过指定一个偏移量的方式得到。而多个元素可以通过切片操作的方式一次得到。序列支持连接操作符“+”,重复连接操作符“*”,以及切片操作符“[],[:],[::]”X=[1,2,3,4]X[0]=1X[0:2]=[1,2,3]X[-1]=4X[::-1]=[4,3,2,1]列表、元组和字典列表、元组和字典都是序列列表是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目元组和列表十分类似,只不过元组和字符串一样是不可变的即你不能修改元组字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息。模块模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。模块可以从其他程序输入以便利用它的功能。这也是我们使用Python标准库的方法。模块如何工作例如我们利用import语句输入sys模块。基本上,这句语句告诉Python,我们想要使用这个模块。sys模块包含了与Python解释器和它的环境有关的函数。当Python执行importsys语句的时候,它在sys.path变量中所列目录中寻找sys.py模块。如果找到了这个文件,这个模块的主块中的语句将被运行,然后这个模块将能够被你使用。注意,初始化过程仅在我们第一次输入模块的时候进行。常见问题文件打开后需要关闭,否则会造成后面程序运行出现问题。f=open(r'/etc/iscsi/initiatorname.iscsi','w')f.write('InitiatorName='+initiatorname)f.close()用readline()从文件中读取了一行,如何把行尾的回车换行符去掉?方法1:replace('\n','')方法2:可以使用n.rstrip()去掉行尾的回车和空格如何获取一个字符串中的某些字符可以采用分片的方式:tag[9:30]表示获取第9至第29个字符(从0开始计算)如何使代码支持中文?在代码头部增加#-*-coding:cp936-*-如何import自定义的模块?首先,必须确保模块名为*.py方法一:添加其所在路径到环境变量中方法二:(不建议使用)import该模块前添加:importsyssys.path.append('该模块所在路径')如何方便地获取配置文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论