版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前感谢群友Brook等人的贡献,欢迎关注库:Python小例/jackzhenguo/python-small-此库会每天持续更新小例子...Python小例子,欢迎扫描关注此PDF是Pyto小例子.0版本,包括:Pythn之基,Pyton之正,Pyton之例,Pyton13个例子。一、Python之Python之基主要总结Pytho常用内置函数及用法,它们在Pyth中被最高频的使用,所以务必掌握,一共包括8个。绝对值或复数的InIn[1]:abs(-Out[1]:InIn[2]:Out[2]:In[3]:Out[3]:InIn[4]:Out[4]:In[5]:Out[5]:asciiIn[30]:classIn[In[30]:classIn[33]:print(xiaoming)id=001,name=In[34]:Out[34]:'id=001,name=initself.id=idreprreturn'id='+self.id+',name=将十进制转换为二进InIn[35]:Out[35]:将十进制转换为八进InIn[36]:Out[36]:将十进制转换为InIn[37]:Out[37]:测试一个对象是True,还是InIn[38]:Out[38]:Out[39]:FalseIn[40]:Out[40]:InIn[44]:s=In[45]:bytes(s,encoding='utf-8')Out[45]:b'apple'将字符、数值类型等转换为字符串类InIn[46]:integ=In[47]:Out[47]:判断对象是否可以被调用,能被调用的对象就是一个callable对象,比如函数str,int等都是可被调用的,但是例子4中xiaoming这个实例是不可被调用的:InIn[48]:callable(str)Out[48]:TrueIn[49]:callable(int)Out[49]:TrueIn[50]:Out[50]:id=001,name=In[51]:callable(xiaoming)Out[51]:False十转InIn[54]:Out[54]:ASCIIInIn[60]:Out[60]:classmethod修饰符对应的函数不需要实例化,不需要self参数,但第一个参数需要是表示自In[66]:classIn[66]:classdeff(cls):initself.id=idreprreturn'id='+self.id+',name=将字符串编译成 InIn[74]:s=In[75]:r=compile(s,"<string>",In[76]:Out[76]:<codeobject<module>atDE75D0,file"<string>",lineIn[77]:InIn[81]:Out[81]:删除对象的属InIn[87]:In[88]:hasattr(xiaoming,'id')Out[88]:FalseInIn[92]:Out[92]:In[93]:dict(a='a',b='b')Out[93]:{'a':'a','b':'b'}In[94]:Out[94]:{'a':1,'b':In[95]:Out[95]:{'a':1,'b':InIn[96]:dir(xiaoming)['class','delattr','dict','dir'doc'eq'format'ge'getattribute','gt','hash'init'init_subclass','le','lt'module'ne'new'reduce','reduce_ex','repr','setattr','sizeof','str','subclasshook','weakref',分别取商和余InIn[97]:Out[97]:(3,InIn[98]:s=...:fori,vin 123将字符串str当成有效的表达式来求值并返回计算结果取出字InIn[99]:s="1+3...:Out[99]:执行InIn[74]:s=In[75]:r=compile(s,"<string>",In[76]:Out[76]:<codeobject<module>atDE75D0,file"<string>",lineIn[77]:过滤器,构造一个序列,等[[itemforitemin blesif在函数中设定过滤条件,逐一循环迭代器中的元素,将返回值为r时的元素留下,形成一个lte数据。InIn[101]:fil=filter(lambdax:In[102]:Out[102]:[11,45,将一个字符串或整数转换为InIn[103]:Out[103]:格式化输出字符串,format(value,format_spec)实质上是调用了value的format(format_spec)In[104]:print("iam{0},age{1}".format("tom",18))In[104]:print("iam{0},age{1}".format("tom",18))iamtom,age18保留小数点后两3不带5数字补零(填充左边,宽度为5数字补x(填充右边,宽度为数字补x(填充右边,宽度为以逗号分隔的数字格百分比格指数'右对齐(默认,宽度为'18左对齐(宽度为'18中间对齐(宽度为创建一个不可修改的集合InIn[105]:Out[105]:frozenset({1,2,获取对象的属InIn[106]:getattr(xiaoming,'name')Out[106]:'xiaoming'InIn[110]:hasattr(xiaoming,'name')Out[110]:TrueIn[111]:hasattr(xiaoming,'id')Out[111]:False返回对象的哈希返回对象的帮助InIn[113]:HelponStudentinmodulemainclass||||||||||||||Methodsdefinedinit(self,id,reprDatadescriptorsdefineddictionaryforinstancevariables(iflistofweakreferencestotheobject(if返回对象的内存获取用户输入内Out[116]:int(x,base=10),x可能为字符串或数值,将x转换为一个普通整数。如果参数是字符串,那么它可能包InIn[120]:Out[120]:In[20]:classInIn[20]:classIn[21]:xiaoming=In[22]:isinstance(xiaoming,Student)Out[22]:Trueinitself.id=idreprreturn'id='+self.id+',name=InIn[27]:class def def In[28]:issubclass(undergraduate,Student)Out[28]:TrueIn[29]:issubclass(object,Student)Out[29]:FalseIn[30]:issubclass(Student,object)Out[30]:TrueInIn[26]:issubclass(int,(int,float))Out[26]:True返回一个可迭代对象,sentinel可省InIn[72]:lst=In[73]:foriin 135 InIn[81]:classinit(self):call(self):#定义了call方法的类的实例是可调用的item=next(self.i)print("calliscalled,whichwouldreturndefiter(self):#支持迭代协议(即定义有iter()函数print("iterisreturnInt=TestIter()t1=iter(t,3)foriint1: iscalled,whichwouldreturn1calliscalled,whichwouldreturnInIn[83]:dic=In[84]:Out[84]:返回可变序列类InIn[85]:list(map(lambdax:x%2==1,[1,3,2,4,1]))Out[85]:[True,True,False,False,True]f返回一个将function应用于 ble中每一项并输出其结果的迭代器Out[85]:[True,True,False,False,True]可以传入多个 In[88]:list(map(lambdax,y:x%2==1andy%2==0,[1,3,2,4,1],[3,2,1,2]))In[88]:list(map(lambdax,y:x%2==1andy%2==0,[1,3,2,4,1],[3,2,1,2]))Out[88]:[False,True,False,False]InIn[99]:Out[99]:In[100]:Out[100]:In[89]:di=In[90]:Out[90]:In[102]:a=...:xiaohong','age':20,'gender':'female'}]In[104]:max(a,key=lambdax:x['age'])Out[104]:{'name':'xiaohong','age':20,'gender':返回最小值,参考求可迭代对象最大值函数InIn[129]:it=In[130]:Out[130]:In[131]:Out[131]:In[132]:Out[132]:In[133]:Out[133]:In[134]:next(it,0)#迭代到头,默认返回值为0Out[134]:0In[135]:Traceback(mostrecentcall<ipython-input-135-bc1ab118995a>in---->1返回一个没有特征的新对象。object是所有类InIn[137]:o=Out[138]:objectInIn[146]:fo=open('D:/a.txt',mode='r',encoding='utf-In[147]:Out[147]:'\ufefflifeisnotsolong,\nIusePython mode取值字意写入,并先截断写入,如果文件存在则在末二进制模文本模式(默认打开用于更新(与写入InIn[149]:pow(3,2,Out[149]:InIn[5]:lst=In[6]:[1,3,In[7]:print(f'lst:{lst}')lst:[1,3,5]In[8]:lst:[1,3,In[9]:lst:[1,3,返回property属性classclassdefinit(self):self._x=defgetx(self):returnself._xdefsetx(self,value):self._x=valuedel#使用property类创建property属性x=property(getx,setx,delx,"I'mthe'x'classclassdefinit(self):self._x=returndefx(self,value):self._x=del创建rangerange(start,生成一个不可变序列InIn[153]:Out[153]:range(0,In[154]:Out[154]:range(0,返回一个反向的iInIn[155]:rev=In[156]:foriin 13241InIn[11]:Out[11]:,In[12]:Out[12]:InIn[159]:a=In[160]:Out[160]:{1,2,3,classslice(start,stop[,返回一个表示由range(start,stop,step)所指定索引集的slice对象,它让代码可读性、可性大大增InIn[13]:a=In[14]:my_slice_meaning=In[15]:Out[15]:[1,2,排序InIn[174]:a=In[175]:Out[175]:[4,3,2,1,In[178]:a=...:In[180]:sorted(a,key=lambdax:x['age'],reverse=False)[{'name':'xiaoming','age':18,'gender':{'name':'xiaohong','age':20,'gender':求和InIn[181]:a=In[182]:Out[182]:In[185]:sum(a,10)#求和的初始值为10Out[185]:21将对象转为一个不可变的序InIn[16]:i_am_list=In[17]:i_am_tuple=tuple(i_am_list)In[18]:i_am_tupleOut[18]:(1,3,classtype(name,bases,传入一个参数时,返回object的类型InIn[186]:type(xiaoming)Out[186]:mainIn[187]:type(tuple())Out[187]:tupleInIn[188]:x=In[189]:y=In[190]:Out[190]:[(4,3),(5,2),(6,In[191]:a=In[192]:b=list('abcde')In[193]:bOut[193]:['a','b','c','d',In[194]:[str(y)+str(x)forx,yinzip(a,b)]Out[194]:['a0','b1','c2','d3','e4']二、Python之Python之正主要总结通过20个例子,Pytho正则表达式。之所以将正则列为一章,是因为字符串处理无所不在,正则是最简洁和高效的处理方法。后面的Python之例,Python之能节会多次使用正则表达式做一些字符串处理相关的工作。importimportss='ilovepythonverymuch'pat='python'r=re.search(pat,s)print(r.span())#(7,13)查找所有ss='山东省潍坊市青州第1中学高三1班'pat='1'r=re.finditer(pat,s)foriinr:#<re.Matchobject;span=(9,10),match='1'>#<re.Matchobject;span=(14,15),\d匹配数字[0-ss='共20行代码运行时间pat=r'\d+'#+表示匹配数字(\d表示数字的通用字符)1次或多次r=re.findall(pat,s)#['20','13',?表示前一个字符匹配0或1ss='共20行代码运行时间pat=r'\d+\.?\d+'#?表示匹配小数点(\.)0次或1次r=re.findall(pat,s)#['20',ss='ThismoduleprovidesregularexpressionmatchingoperationssimilartothosefoundinPerl'pat=r'^[emrt]'#查找r=re.findall(pat,s)#[],因为字符串的开头是字符`T`,不在emrt匹配范围内,所以返回为re.Iss='ThismoduleprovidesregularexpressionmatchingoperationssimilartothosefoundinPerl'pat=r'^[emrt]'#查找r= #<re.Matchobject;span=(0,1),match='T'>表明字符串的开头在匹配列表中ss='ThismoduleprovidesregularexpressionmatchingoperationssimilartothosefoundinPerl'pat=r'\s[a-zA-Z]+'r=re.findall(pat,s)print(r)#['module','provides','regular','expression','matching','operations','similar','to','those','found','in','Perl']使用()捕获,这是确版本,请参看第9ss='ThismoduleprovidesregularexpressionmatchingoperationssimilartothosefoundinPerl'pat=r'\s([a-zA-Z]+)'r=print(r)#['module','provides','regular','expression','matching','operations','similar','to','those','found','in','Perl']上面第8,看到提取单词中未包括第一个单词,使用表示前面字符出现0次或1次,但是此字符还有表ss='ThismoduleprovidesregularexpressionmatchingoperationssimilartothosefoundinPerl'pat=r'\s?([a-zA-Z]+)'r=re.findall(pat,s)print(r)#['This','module','provides','regular','expression','matching','operations','similar','to','those','found','in','Perl']使用split使用以上方法分割单词,不是简洁的,仅仅为了演示。分割单词最简单还是使用split函数ss='ThismoduleprovidesregularexpressionmatchingoperationssimilartothosefoundinPerl'pat=r=print(r)#['This','module','provides','regular','expression','matching','operations','similar','to','those','found','in','Perl']下面出现的结果不是我们想要的,原因出在上ss='ThismoduleprovidesregularexpressionmatchingoperationssimilartothosefoundinPerl'pat=r'\s?([mt][a-zA-Z]*)'#查找r=print(r)#['module','matching','tions','milar','to',使用^ss='ThismoduleprovidesregularexpressionmatchingoperationssimilartothosefoundinPerl'pat=r'^([mt][a-zA-Z]*)\s'#查找r= print(r)#['This']使用match表示是否ss='ThismoduleprovidesregularexpressionmatchingoperationssimilartothosefoundinPerl'pat=r=res=[iforiinrifprint(res)#['This','module','matching','to',尽可能多的匹配pile(r"<div>(.*)</div>")#贪婪模式print(m)#与14相比,仅仅多了一个问号(),得到结果完全不同pile(r"<div>(.*?)</div>")#贪婪模式print(m)#['graph','math']使用使用splitcontent='graphmath,,english;chemistry'#这pile(r"[\s\,\;]+")#贪婪模式print(m)#['graph','math','english',sub函数实现对匹配子串的替 oopile(r'\d+')#要替换的部print(m)# o666, 爬取首页标importimportfromurllibimport#爬虫爬 首页内print(result)<re.Matchobject;span=(1358,1382), result.group()下,你就知道..匹配任意字符^匹配字符串始位$匹配字符串中结束的位*前面的原子重复0次1次多?前面的原子重复次或者0+前面的原子重复次或多{n}前面的原子出现了n{n,}前面的原子至少出现n{n,m}前面的原子出现次数介于n-m()分组,需要输出的部分\s\s匹配空白字符\w匹配任意字母/数字/下划线\W和小写w相反,匹配任意字母/数字/下划线以外的字符\d匹配十进制数字\D匹配除了十进制数以外的值[0-9]匹配个0-9之间的数字[a-z]匹配小写英文字母[A-Z]匹配大写英文字母以上就是Pytn中正则模块的基本使用总结,里面有循序渐进的优化分析过程,这些虽然是中间过程,但是对于正则而言,了解这些很有必要。笔者对于正则的理解和使用也比较肤浅,总结之处,恳请指正。三、Python之Python之例章中每个例子大都10行左右,1.0版本一共包括32个小例子,都是很有意ii=print(1<i<3)#Falseprint(1<i<=3)#不用else和iffromfromoperatorimportdefcalculator(a,b,k):return{'+':'-':'*':'/':'**':}[k](a,calculator(1,2,'+')#calculator(3,4,'**')#fromfromoperatorimport(add,defadd_or_sub(a,b,return(addifoper=='+'elsesub)(a,add_or_sub(1,2,'-')#-defdefreturn(len(mystr.encode('utf-str_byte_len('ilovepython')#13(个字节)str_byte_len('字符')#6(个字节)寻找第ndefdefsearch_n(s,c,n):size=0fori,xinenumerate(s):ifx==c:size+=1ifsize==return-1print(search_n("fdasadfadf","a",3))#结果为7print(search_n("fdasadfadf","a",30))#结果为-1##方法defscore_mean(lst):returnlst=[9.1,9.0,8.1,9.7,19,8.2,defdefswap(a,b):returnb,print(swap(1,0))#In[19]:InIn[20]:array([[0,1,2,3,打印99乘法打印出如下格式7*8=567*9=638*9=72一共有10行,第i行的第j列等于j*i,i取值范围:j取值范围:根据例子分析的语言描述,转化为如forforiinforjinprint(str(j)+str("*")+str(i)+"="+str(i*j),end="\t")注意print(str(j)+str("*")+str(i)+"="+str(i*j),end="\t",两种更友好的写法forforiinforjinrange(1,i+1):forforiinforjinrange(1,i+1):对于如下数组如何完全展开成一维的。这个小例子实现的flatten是递归版,两个参数分别表示带展开的数组,输出fromfromcollections.abcimport#返回defflatten(input_arr,output_arr=None):ifoutput_arrisNone:output_arr=[]foreleininput_arr:ifisinstance(ele, ble):#判断ele是否可迭flatten(ele,output_arr)#尾数递归 #产生结果return调用flatten4,numpy里的flatten与上面的函数实现有些importimportb=numpy.array([[1,2,3],[4,5]])array([list([1,2,3]),list([4,5])],fromfrommathimportdefdivide(lst,size):ifsize<=0:returnreturn[lst[i*size:(i+1)*size]foriinrange(0,ceil(len(lst)/rr=divide([1,3,5,7,9],print(r)#[[1,3],[5,7],r=divide([1,3,5,7,9],print(r)#[[1,3,5,7,r=divide([1,3,5,7,9],-print(r)#[[1,3,5,7,13那契数列前ndefdeffibonacci(n):a,b=1,1for_inrange(n):yieldaa,b=b,a+list(fibonacci(5))#[1,1,2,3,defdefreturnlist(filter(bool,r=filter_false([None,0,False,'',[],'ok',[1,2]])print(r)#['ok',[1,2]]defdefreturnmax(*lst,key=lambdav:r=max_length([1,2,3],[4,5,6,7],print(f'更长的列表是{r}')#[4,5,6,r=max_length([1,2,3],[4,5,6,7],[8,print(f'更长的列表是{r}')#[4,5,6,defdefreturnmax(lst,default='列表为空',key=lambdav:lst=[1,3,3,2,1,1,r=print(f'{lst}中出现次数最多的元素为:{r}')#[1,3,3,2,1,1,2]中出现次数最多的元素defdefreturnmax(max(*lst,key=lambdav:r=max_lists([1,2,3],[6,7,8],[4,print(r)#检查listdefdefreturnlen(lst)==x=[1,1,2,2,3,2,3,4,5,y=[1,2,3,4,has_duplicates(x)#Falsehas_duplicates(y)#Truedefdefreturnmin(min(*lst,key=lambdav:r=min_lists([1,2,3],[6,7,8],[4,print(r)#fromfromcollectionsimportdeffind_all_duplicates(lst):c=Counter(lst)returnlist(filter(lambdak:c[k]>1,find_all_duplicates([1,2,2,3,3,3])#defdefreverse(lst):returnlst[::-1]r=reverse([1,-2,3,4,1,print(r)#[2,1,4,3,-2,defdefrang(start,stop,start,stop,n=float('%.2f'%start),float('%.2f'%stop),int('%.d'%n)step=(stop-start)/nwhilen>start,n=start+step,n-1lst.append(round((start),2))returnrang(1,8,10)#[1.0,1.7,2.4,3.1,3.8,4.5,5.2,5.9,6.6,7.3,defdefbif_by(lst,return[[xforxinlstifFn(x)],[xforxinlstifnotrecords=bif_by(records,lambdax:x<80)#[[25,31,34],##多序列运算函数—list(map(lambdax,y:x*y+1,lst1,lst2))###[4,9,16,25,16,13]fromfromcollectionsimporta=['apple','orange','computer',b=['computer',ca=Counter(a)cb=#Counter对象间可以做 ca+cb#Counter({'orange':3,'computer':2,'apple':#进步抽象,实现多个列表内元素的个数统计defif(len(c)<1):mapc=map(Counter,c)s=Counter([])foricinmapc:#ic是个Counterreturns#Counter({'orange':3,'computer':3,'apple':1,'abc':1,'face':sumcsumc(a,b,['abc'],['face',defdefmax_pairs(dic):returnmax_val=max(map(lambdav:v[1],return[itemforitemindic.items()ifitem[1]==r=max_pairs({'a':-10,'b':5,'c':3,'d':print(r)#[('b',5),('d',defdefmerge_dict2(dic1,return{**dic1,**dic2}#python3.5后支持的行代码实现合并字典merge_dict({'a':1,'b':2},{'c':3})#{'a':1,'b':2,'c':topN最大值字fromfromheapqimportnlargest#返回字典d前n个最大值deftopn_dict(d,returnnlargest(n,d,key=lambdak:topn_dict({'a':10,'b':8,'c':9,'d':10},3)#['a','d',##求字典最d={'a':-10,'b':5,min(d.items(),key=lambdax:x[1])#('a',-fromfromcollectionsimport#检查两个字符串是否相同字母异序词,简称:互为defanagram(str1,returnCounter(str1)==anagram('eleven+two','twelve+one')#True这是 的变位anagram('eleven','twelve')#st[::-字字符串切片操作——查找替换3或5的倍"".join([str("java"[i%3*4:]+"python"[i%5*6:]ori)foriinrange(1,15)])'12java4pythonjava78javapython11java1314'四、Python之Python之能是实战中的28个小功能,它比Python之例中的例子代码行数多一些。在你搭建crm是python开发的集成开发环境(IntegrtedDeveopmentEnvironment,简称IDE),它本身无法执行Pyhon代码 python官网python3.7或python3.8版本;如果安装过anaconda,它里面必然也包括一个某anaconda是把python所有常用包的合集,并提供给我们使用conda命令非常非常方便的安装各conda安装:我们安装过anaconda软件后,就能够使用conda命令anaconda源里(比大镜像源)的pip安装:也是一种类似于conda安装的python安装方法,如果用过Centos系统,它就像yum安修改镜像在使用安装conda安装某些包会出现慢或安装失败问题,最有效方法是修改镜像源为国内镜像源。之condacondaconfig--查看配置项channels,如果显示带有tsinghua,则说明已安装过镜像-----/anaconda/cloud/conda-/下一步,使用condaconfig--removechannelsurl地址删除镜像,如下命令删除第一个。然condacondaconfig--remove添加目前可用的大镜像源condacondaconfig--add condacondaconfig--setshow_channel_urls确认是否安装镜像源成功condaconfig--show,找到channels值为如下--/自动邮Python自动邮importimportimport.mimeimport(text,application,importdefsmt_p=smtplib.SMTP() ',port=25)sender,password=' ',"**************"smt_p.login(sender,password)receiver_addresses,count_num[1', _addressinreceiver_addresses:msg=multipart.MIMEMultipart()msg['From']="zhenguo"msg['To']= msg['subject']=header.Header('这是邮 通知','utf-'这是封测试邮件 回复本邮件~', in','utf-print('第%d次发送给%s'%(count_num,count_num=count_num+1exceptExceptionasprint('第%d次给%s发送邮件异常'% 注意发送邮箱是q邮箱,所以要在q邮箱中设置开启STP服务,设置完成时会生成一个码,将这个授权码赋值给文中的password变量。发送后的截图在有序数组arr中,指定区间[left,right范围内,查找元素如果不存在,返回-二分搜索binarySearch实现的主逻defdefbinarySearch(arr,left,right,x):whileleft<=right:mid=int(left+(right-left)/2);#找到中间位置。求中点写成(left+right)/2更容易溢出,所以#检查x是否出现在位置midifarr[mid]==x:print('found%d在索引位置%d处return#假如x更大,则不可elifelifarr[mid]<left=mid+1#搜索区间变为[mid+1,right]print('区间缩小为[%d,%d]'#同理,假如xelifright=mid-1#搜索区间变为[left,mid-1]print('区间缩小为[%d,%d]'%(left,mid-#假如搜索到这里,表明x未出现在[left,right]return-Ipython交互界面中,调用binarySearch的小InIn[8]:found5at1Out[8]:In[9]:found4at0Out[9]:In[10]:found20atOut[10]:In[11]:区间缩小为[4,6]区间缩小为[6,6]found100atOut[11]:批量修改文件后本例子使用Python的os模块和argparse模块,将工作 work_dir下所有后缀名为old_ext的文件修改为后缀名为new_ext通过本例子,大家将会大概argparse模块的主要用法。importimportargparseimportos定义参defdefget_parser():parser=argparse.ArgumentParser(description=' 中文件后缀名修改parser.add_argument('work_dir',metavar='WORK_DIR',type=str,nargs=1, parser.add_argument('old_ext',type=str,nargs=1,help='原来的后缀')parser.add_argument('new_ext',metavar='NEW_EXT',type=str,nargs=1,help='新的后缀后缀名批量修传递当 ,原来后缀名,新的后缀名后,批量重命名后forfilenameinos.listdir(work_dir):#获取得到文件后缀split_file=os.path.splitext(filename)file_ext=split_file[1]#定位后缀名为old_ext的文ifold_ext==file_ext:#修改后文件的完整名newfile=split_file[0]+new_ext#实现重命名操作os.path.join(work_dir,filename),os.path.join(work_dir,newfile))实现defdefmain():main函#命令行参数parser=args=vars(parser.parse_args())#从命令行参数中依次解析出参数work_dir=args['work_dir'][0]old_ext=args['old_ext'][0]ifold_ext[0]!='.':old_ext='.'+old_extnew_ext=args['new_ext'][0]ifnew_ext[0]!='.':new_ext='.'+batch_rename(work_dir,old_ext,定义统计文件行##统计文件个数print('文件名cnt=withopen(statfile,encoding='utf-8')asf:whilef.readline():cnt+=return##more表示含 行数的文defdiff(more,cnt,less):difflist=[]withopen(less,encoding='utf-8')asl:withopen(more,encoding='utf-8')asm:lines=fori,lineinifline.strip()!=m.readline().strip():ifcnt-i>1:difflist.extend(range(i+1,cnt))return[no+1fornoin主函##返回的结果行号从1开#list表示fileA和fileB不同的行的编cntA cntB= ifcntA>cntB:returndiff(fileA,cntA,fileB)returndiff(fileB,cntB,fileA)exceptExceptionase:比较两个文件A和B,拿相对较短的文件去比较,过滤行后的换\n和空格。使用file_diff_line_nos函数ififname=='main':importosfileA=o'nicetomeetyou'\fileB="'oworld!!!!''\'nicetomeetyou'\'yes'"diff=file_diff_line_nos('./testdir/a.txt','./testdir/b.txt')print(diff)#[4,5]关于文件比较的,实际上,在Python中有对应模块difflib,提供其他格式的文件更详细的比fflib.html?highlight=difflib#module-importimportdeffind_file(work_dir,extension='jpg'):lst=[]forfilenameinos.listdir(work_dir):splits=os.path.splitext(filename)ext=splits[1]#拿到扩展名ifext=='.'+extension:returnr=find_file('.','md')print(r)#返回所有 xls批量转换成##批量转换文件xls-importos.pathimportos.asdefrootdirr"C:\Users\CQ375\Desktop\temp1#需要转换的xls文件存放处rootdir1=r"C:\Users\CQ375\Desktop\ex"#转换好的xlsx文件存放处files=os.listdir(rootdir)#列出xls文件夹下的所有文件num=len(files)#列出所有文件的个数foriinrange(num):#按文件个数执行次数knameknameos.path.splitext(files[i])[1#分离文件名与扩展名,返回(f_name,ifkname=='.xls':#判定扩展名是否为 其它文fname=rootdir+'\\'+files[i]#fname1=rootdir1+'\\'+files[i]#合成准备存放转换好的路径与文件名excel=win32.gencache.EnsureDispatch('Excel.Application'#调用win32模wb=excel.Workbooks.Open(fname)#打开需要转换的文件wb.SaveAs(fname1+"x"FileFormat=51#文件另存为xlsx扩展名的文件ifname =='main':#获#获 下文件的修改时importosprint(f"当前时间:{datetime.datetime.now().strftime('%Y-%m-%dforroot,dirs,filesinos.walk(r"D:\works"):#循环 和forfileinfiles:diffTime=now-ifdiffTime.days<20:#条件筛选超过指定时间的文件距今[{diffTime.days:3d}天{diffTime.seconds//3600:2d}{diffTime.seconds%3600//60:2d}]")#打印相关当前时间:2019-12-07D:\works\[17天22时D:\works\工作资\设备信息变更表2019.11.8.xlsx修改时间[2019-11-1923:19:06]距\建筑基础资料整理\XML支.xlsx修改时间[2019-11-23:57:15]距今[17天22时 22:43:36]距今[16天23时23]##计算指定日期当月最后importdatetimeimportinit_date=datetime.date.today()print('当前给定时间:',init_date)current_month_last_day=datetime.date(init_date.year,init_date.month,print("当月最后天print("该月天数当前给定时间:2019-12-December123456789当月最后天:2019-12-该月天数:importimportzipfile#导入zipfile,这个是用来做压缩和解压的Python模块;importosdefstart_dir=start_dir#要压缩的文件夹路径file_news=start_dir+'.zip'#压缩后文件夹的名字z=zipfile.ZipFile(file_news,'w',zipfile.ZIP_DEFLATED)fordir_path,dir_names,file_namesin#这句很重要,不 ce的话,就从 开f_path= ce(start_dir,f_path=f_pathandf_path+os.sep#实现当前文件夹以及包含的所有文件的压缩forfilenameinreturnimportimportos创建文件夹defdef ists=os.path.exists(path)ifnoti defopenfile(filename):f=open(filename)fllist=f.read()returnfllist#返 内###wf=open(r"./data/test.txt","w",encoding="utf-8")##af=open(r"./data/test.txt","a",encoding="utf-8")##withwithopen(r"./data/test.txt","w")asf: oworld!")32位加importimport#对字符串s实现32位加defm=hashlib.md5()returnm.hexdigest()print(hash_cry32(1))#c4ca4238a0b923820dcc509a6f75849b 13判Python的re模块提供字符正则匹配检查,功能强大,写法高效简洁,因此在工作中会被经常使用。例子要求为6到20位导入importimportaa pile(r'[0-9a-zA-a为正则对象,里面方法包括match、fullmatch[]表示匹配字符集合,此处0-9a-zA-Z满 只包含英文字母和数{6,20}表示字符长度,满足要 为6到20检查InInOut[6]:Matchobject;span=(0,8),fullmatch表示整个字符串是否匹配,显然字符串ddd234ws完全匹InIn[7]:a.fullmatch('ddd234ws###')#返回None,表示字符串不匹配我们的要求#如下都是不匹配的例In[8]:In[9]:In[10]:完整importimportdefapile(r'[0-9a-zA-ifa.fullmatch(mystr)isreturn' return' ###\s指匹配:[\t\n\r\f\v]#A|B:表示匹配A串或B串#re.sub(pattern,newchar, substitue代替,用newchar字符替代与pattern匹配的字符所有##title():转化为大写,例子:# oworld'.title()#o##print(re.sub(r"\s|_|","","Hes=re.sub(r"(\s|_|-)+"," ce("")#结果:SomeDatabaseFieldName##可以看到此时的第个字符为大写,需要转化为小写s=s[0].lower()+s[1:]#最终结importimportres=re.sub(r"(\s|_|-)+","",s).title().re ce("","")returns[0].lower()+s[1:]#批量转defreturn[camel(s)forsin:#['studentId','studentName',爬取的html结构importimportimportpandasaspdimportreurl=withrequests.get(url)asres:content=res.contenthtml=lxml比beautifulsoup解析在某些场合更locationlocation=html.xpath('//*[@id="around"]//a[@target="_blank"]/span/text()')temperature=html.xpath('//*[@id="around"]/div/ul/li/a/i/text()')结果[['香河','涿州',' ','沧州',' ','廊坊','太原','石家庄','涿鹿','张家口','保定','三河',' 孔庙',' 国子监','中国地质博物馆','月坛公园','明城墙遗址公园',' 市规划展览馆','什刹海','南锣鼓巷','天坛公园','北海公园','景山公园',' ['11/-5°C','14/-5°C','12/-6°C','12/-5°C','11/-1°C','11/-5°C','8/-'13/-2°C','8/-6°C','5/-9°C','14/-6°C','11/-4°C','13/-,'13/-3°C','12/-3°C','12/-3°C','13/-3°C','12/-2°C','12/-3°C','13/-3°C','12/-2°C','12/-2°C','12/-2°C','12/-3°C']dfdfpd.DataFrame({'location':location'temperature':temperature})正则解析温度dfdf['high']=df['temperature'].apply(lambdax:int(re.match('(-?[0-9]*?)/-?[0-9]*?°C',x).group(1)))df['low']=df['temperature'].apply(lambdax:int(re.match('-?[0-9]*?/(-?[0-9]*?)°C',x).group(1)))详细说明子字符创捕除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示的就是(group)。比如:^(\d{3})-(\d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区号#010-##如果正则表达式中定义了组,就可以在Match对象上用group方法提取出子串注意到group(0)是原始字符串,group(1)、group(2)……表示第1、2、……个子串。0香11/--1涿14/--212/--3沧12/--411/--5廊11/--6太8/-8-7石家13/--8涿/- -9张家5/- -保14/- 三11/- 孔13/- -国子13/- -中国地质博物12/- -月坛公12/- -明城墙遗址公13/- -市规划展览12/- -什刹12/- -南锣鼓13/- -天坛公12/- -北海公12/- -景山公12/- -海洋海洋12/- -##编写个迭代器,通过循环语句,实现对某个正整数的依次递减1,直到0.classDescend(I definit(self,N):defiter(self):returnselfdefnext(self):whileself.a<self.N:raise [9,8,7,6,5,4,3,2,1, 名字不能变,实现定制的迭raise tion:通过raise中断程importtimedeftiming_func(fn):defwrapper(): return(stop-start)returnwrapperdeftest_list_append():foriin [iforiinrange(0,100000)]#列表生成式print("testlistappendtime:",a)print("testlistcomprehensiontime:",c) testlistappendtime:testlistcomprehensiontime:0.007980823516845703pre:2.749ui使用qtdesigner,按装anaconda后,在如designer.exe文件,双击创建窗体,命名为XiaoDing,整个的界面如qt设计器提供的常用控件基本都能满足开发需求,通过拖动左侧的控件,很便捷的最终设计的计算器XiaoDing界面如下,比如,其中一个用于计算器lcdNumber,对象的LCDNumber。右侧为计算器中使用如下命令,将设计好的ui文件转为py文件pyuic5pyuic5-o./calculator/MainWindow.pyfromfromPyQt5.QtGuiimport*fromPyQt5.QtWidgetsimport*fromPyQt5.QtCoreimport*importfromMainWindowimport##Calculatorstate.READY=0INPUTINPUT=classMainWindow(QMainWindow,Ui_MainWindow):definit(self,*args,**kwargs):super(MainWindow,self).init(*args,**kwargs)#Setupforninrange(0,#Setupoperations.self.operation(operator.truediv))#operator.divfor#Setupactions基础方法defdefinput_number(self,v):ifself.state==self.state=INPUTself.stack[-1]=self.stack[-1]=self.stack[-1]*10+ def y(self.stack[-按钮REM,RE对应的实defdefreset(self):self.stack=[0]self.last_operation=Noneself.current_op=None defself.memory=defmemory_recall(self):self.state=INPUTself.stack[-1]=self.memory -x/100对应实现方defdefoperation(self,ifself.current_op:#Completethecurrentoperationself.state=INPUTself.current_op=defoperation_pc(self):self.state=INPUTself.stack[-1]*=0.01 号对应的方defdefifself.state==READYandself.last_operation:s,self.current_op=self.last_operationifself.last_operation=self.stack[-1],self.stack=[self.current_op(*self.stack)]exceptException: self.stack=[0]self.current_op=Noneself.state=READY mainififname =='main':app=QApplication([])window=MainWindow()完整代码请参考点击阅读原文,代码只有100行。完整代码文章最底部的【阅读原文】。启turtle绘制奥tutle绘图的函数非常好用,基本看到函数名字,就能知道它的含义,下面使用tutle,仅用15导入importimportdefdefdrawCircle(x,y,c='red'):p.pu()#抬起画笔p.goto(x,y)#p.pd()#p.color(c)#绘制cp.circle(30,360)#pp=p.pensize(3)#画笔尺寸设置drawCircle(30,-结果turtle绘制漫天雪导入导入turtle库和pythonimportimportturtleaspimportrandom绘制defdefsnow(snow_count):foriinrange(snow_count):r=random.random()g=bb=random.random()p.pencolor(r,g,b)p.goto(random.randint(-350,350),random.randint(1,270))dens=random.randint(8,12)snowsize=random.randint(10,14)for_inrange(dens):p.forward(snowsize)#向当前画笔方向移动snowsize #向当前画笔相反方向移动snowsizep.right(360/dens)#顺时针移动360/dens绘制defdefground(ground_line_count):foriinrange(ground_line_count):p.pensize(random.randint(5,10))x=random.randint(-400,350)y=random.randint(-280,-1)r=-y/280g=-y/280b=-y/p.pencolor(r,g,b)p.penup()#抬起画p.goto(x,y)#让画笔移动到此位置p.pendown()#放下画p.forward(random.randint(40,100))#眼当前画笔方向向前移动40~100主函defdefp.setup(800,600,0,0)#p.tracer(False)#p.tracer(True)动态图结果展示wordcloud#0#1#2#3#4#5#6#7广#8广#9广plotly##柱状图+折线importplotly.graph_objectsasgofig=go.Figure()fig.add_trace(go.Scatx=[0,1,2,3,4,y=[1.5,1,1.3,0.7,0.8,x=[0,1,2,3,4,y=[2,0.5,0.7,-1.2,0.3,##importseabornassnsimportpandasaspdimportnumpyasnpimportmatplotlib.pyplotas#生成数据data=np.random.random((6,6))features=["prop1","prop2","prop3","prop4","prop5","prop6"]data=pd.DataFrame(data,index=features,columns=features)#绘制热力matplotlib折线importimportmatplotlib.pyplotas创建画图fig和axesdeffig,axes=plt.subplots(ncols=3,figsize=(6.5,3))foraxinfig.axes:ax.set(xticks=[],yticks=[])fig.subplots_adjust(wspace=0,left=0,right=0.93)returnfig,axes 标deftitle(fig,text,fig.suptitle(text,size=14,y=y,weight='semibold',x=0.98,ha='right',bbox=dict(boxstyle='round',fc='floralwhite',ec='#8B7E66',#为数据添加文本注deflabel(ax,text,ax.annotate(text,xy=(0.5,0.00),xycoords='axesfraction',ha='center',bbox=dict(boxstyle='round',facecolor='floralwhite',importimportnumpyasimportmatplotlib.pyplotasimportx=np.linspace(0,10,fig,axes=example_utils.setup_axes()foraxinaxes:#子图1默认plot多条线,颜色系统分foriinrange(1,6):axes[0].plot(x,i*#子图2展示线的不同fori,lsinenumera
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北农业大学现代科技学院《生物化学实验》2021-2022学年第一学期期末试卷
- 2024短视频平台运营安全与合作合同2篇
- 空白房屋出租合同模板
- 2024年度游戏开发与代理协议2篇
- 2024年度智能家居研发与市场推广协议
- 护理输血安全质控制度
- 二零二四年度工程品牌授权合同2篇
- 暑假班新教师岗前培训
- 2024版计算机软件开发公司与云平台搭建服务合同3篇
- 2024范文大全商铺租期延长合同:租期调整与费用计算3篇
- 《纪录片创作理论与实践》- 教学大纲(48学时)
- 机构员工劳动合同范例
- 工程总承包施工方案
- 旅游岗位招聘笔试题与参考答案(某大型国企)2025年
- 2024年江苏省扬州市中考语文试卷
- 人教版数学二年级上册-第7单元(认识时间)认识时间(课件)(共19张课件)
- JBT 7043-2006 液压轴向柱塞泵
- 西方文明史导论智慧树知到期末考试答案2024年
- 清华大学博士学位论文自动格式模板
- 口腔颌面外科学:髁突骨折
- 2021届高三联考作文“相信与怀疑”原题解析及优秀文段
评论
0/150
提交评论