运维的我要学开发--Python(6)
本文均来自Python Cookbook,本博文励志将Cookbook中的string部位,文件,面向对象编程部分完成,本系列博文陆续还会介绍flask框架,每篇博文都以一个个小例子展示。
#-*- coding: utf-8 -*- ‘‘‘ windows下修改文件属性 ‘‘‘ import win32con,win32api,os #创建一个文件,并展示如何操作它 thefile = ‘test‘ f = open(‘test‘,‘w‘) f.close() #设置成隐藏文件... win32api.SetFileAttributes(thefile,win32con.FILE_ATTRIBUTE_HIDDEN) #设置成只读文件 win32api.SetFileAttributes(thefile,win32con.FILE_ATTRIBUTE_READONLY) #设置成普通文件 win32api.SetFileAttributes(thefile,win32con.FILE_ATTRIBUTE_NORMAL) #最后删除掉该文件 os.remove(thefile) ‘‘‘ 对象的拷贝 对象的引用(对一个对象的赋值,作为参数传递, 作为结果返回,Python通常都是指向原 ‘‘‘ #什么是对象引用 a = [1,2,3,4] b = a #b引用了a b.append(5) print a,b #结果:[1, 2, 3, 4, 5] [1, 2, 3, 4, 5] import copy listobject=[1,2,3,4] #第一种对象拷贝方式(但是不适用于其属性或者内容中仍然是一个对象的情况 new_list = copy.copy(listobject) new_list.append(5) print new_list,listobject #必须使用deepcpoy的情况 listobject=[[1,2,3],[5,6,7]] new_list = copy.copy(listobject) new_list[1].append(1000) print new_list,listobject #结果 [[1, 2, 3], [5, 6, 7, 1000]] [[1, 2, 3], [5, 6, 7, 1000]] #第二种对象拷贝方式.递归拷贝对象 new_list = copy.deepcopy(listobject) ‘‘‘ 判断一个列表中的某个元素是否存在,存在则返回 ‘‘‘ #方案一 def list_get(L,i,v=None): if -len(L) <= i < len(L):return L[i] else:return v #方案二 def list_get_egfp(L,i,v=None): try:return L[i] except IndexError:return v #除非传入的索引值大多数是有效的,否则方案二要比方案一慢多了 ‘‘‘ 多维列表的创建 ‘‘‘ #得到1*5的列表 alist = [0]*5 #得到3*5的列表 multi = [[0]*5]*3 print multi #结果[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] multi[0][0]=‘oops‘ print multi #存在bug #[[‘oops‘, 0, 0, 0, 0], [‘oops‘, 0, 0, 0, 0], [‘oops‘, 0, 0, 0, 0]] #序列乘以数字得到的是包含多个引用原始内容的子项 #正确的多维序列的创建,使用列表推导没有任何隐式的引用 multi = [[0 for col in range(5)] for row in range(5)] ‘‘‘ 展开嵌套序列 ‘‘‘ def list_or_tuple(x): return isinstance(x,(list,tuple)) def flatten(sequence,to_expand=list_or_tuple): for item in sequence: if to_expand(item): for subitem in flatten(item,to_expand): yield subitem else: yield item ‘‘‘ 二维阵列变换 ‘‘‘ arr = [[1,2,3],[4,5,6],[7,8,9]] #方法一 print [[r[col] for r in arr] for col in range(len(arr[0]))] #方法二 print map(list,zip(*arr)) #结果[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
本文出自 “专注linux” 博客,请务必保留此出处http://forlinux.blog.51cto.com/8001278/1408637
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。