python3.0笔记
python文件头
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' Created on 2017年5月9日 @author: Administrator '''
python主入口
#!usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2017牛5月9日 @author: Administrator ''' ''' 通俗的理解name == '__main__':假如你叫小明.py,在朋友眼中,你是小明(name == '小明');在你自己眼中,你是你自己(name == '__main__') ''' def ceshi(): name='name in fun' print(name) name='test' if __name__ == '__main__': ceshi() print(name)
模块导入
方式1. 导入模块中的函数 from ceshi.py import fun 方法2: 导入整个模块(ceshi模块) import ceshi 方法3:导入工程中的任何模块 import os,sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #获取到工程路径 sys.path.append(BASE_DIR) #工程路径加入到 模块搜索路径 from day1 import note1 #导入模块 print(dir(note1))
获取当前文件路径
#!usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2017年5月9日 @author: Administrator ''' import os,sys #输出本文件的绝对路径 print(os.path.abspath(__file__)) #输出本文件的上级目录,op.path.dirname()可以多层 print(os.path.dirname(os.path.abspath(__file__))) sys.path.append(os.path.dirname(os.path.abspath(__file__))) from tools import base result=base.js(1,2,'+') print(result)
例子格式化输出
#!usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2017年5月9日 @author: Administrator ''' '''例子格式化输出 #### %s:字符串 %d:十字制数字 ''' _str1="abc" _str2="trfc" _num1=10 _num2=20 print(''' _str1=%s, _str2=%s, _num1=%d, _num2=%d ''' %(_str1,_str2,_num1,_num2))
例子三元运算
'''例子三元运算 a,b=3,5 c=a if a<b else b # 表达式:值1 if 条件 else 值2 结果 条件为true,返回值1,否则返回值2 print(c) '''
例子文件操作
描述
文件读操作是有个句柄。读过后句柄就往后走了。想重新读上面的内容 需要设置句柄
文件打开模式
最常用的r和r+ r,只读模式(默认)。 w,只写模式。【不可读;不存在则创建;存在则删除内容;】 a,追加模式。【可读; 不存在则创建;存在则只追加内容;】 "+" 表示可以同时读写某个文件 r+,可读写文件。【可读;可写;可追加】 w+,写读 a+,同a "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注) open('文件名',mode='rb') #注意这里不能给编码,二进制文件不存在编码 rb wb ab
例子-模式
fn = open('yesterday',encoding='utf8',mode='r') #参数路径,编码 print(fn.read())
循环读文件1,用这种方法是 只保存一行在内存中,所以高效
fn = open('yesterday',encoding='utf8',mode='r') for line in fn: print(line.strip())
循环读文件1,用这种方法是 一次性把整个文件内容读出来放在内存里。大文件的话效率低,而且占用内存大
fn = open('yesterday',encoding='utf8',mode='r') for line in fn.readlines(): print(line.strip())
打开文件推荐方法,此方法不用手动去关闭文件
with open('yesterday',encoding='utf8',mode='r') as fn: for line in fn: print(line.strip())
#例子:句柄的操作,tell()和 seek()
fn = open('yesterday',encoding='utf8',mode='r') print(fn.readline()) print(fn.tell()) fn.seek(0) print(fn.readline())
#列子,写文件
import os file_path="d:\\111.txt" if not os.path.exists(file_path): fn = open(file_path,mode='a') fn.close() else: with open(file_path,encoding='utf8',mode='a+') as fn: fn.write("this is ceshi ...\n") fn.write("this is ceshi 22222 ...\n") fn.close()
循环和控制
例子if_elif_else
'''例子if_elif_else 例子if_else _name='hui' _pwd='hui123' name=input("name:") pwd=input("pwd:") if _name==name and _pwd==pwd: print("login sucess") else: print("login fail") 例子: if elif else age_of_alex=35 guessAge=int(input('input guess age :')) if guessAge==age_of_alex: print('is right') elif guessAge>age_of_alex: print('think to small...') else: print('think to big...') 例子 if 取反 import os dir='D:\\tmp' if not os.path.exists(dir): os.mkdir(dir) '''
例子while
'''例子while 例子while count=0 while count < 3: print(count) count+=1 例子2:while count=0 while True: if count == 10: break print(count) count+=1 例子3: while, else:为while正常走完后执行的语句。如果被break破坏了 不执行else: age_of_alex=35 count=0 while count<3: guessAge=int(input('input guess age :')) if guessAge==age_of_alex: print('is right') break elif guessAge>age_of_alex: print('think to small...') else: print('think to big...') count+=1 else: print('while end') '''
例子for
'''例子for 例子for for i in range(5): print('loop:',i) 例子2:for。注意 else:为for正常走完后执行的语句。如果被break破坏了 不执行else: age_of_alex=35 for i in range(3): guessAge=int(input('input guess age :')) if guessAge==age_of_alex: print('is right') break elif guessAge>age_of_alex: print('think to small...') else: print('think to big...') else: print('while end') 例子3:for 注意: range三个参数 @0 开始 @10 结束 @2步长 。如果没有给 默认为1 for i in range(0,10,2): print('loop:',i) 例子4:for 注意: i%2 == 0 为偶数。 for i in range(0,10): if i%2 == 0: continue print('loop:',i) '''
数据类型
例子:字符串操作
'''例子:字符串操作 __abc__ 此命名的为内容方法。不用管 #例子:正则替换字符串 import re reg=' +' str="abc 123 23 1234" result,number=re.subn(reg,' ',str) print(result) #例子:首字母大写 name='alex' print(name.capitalize()) #例子:统计单词数量 name='alex' print(name.count('ex')) #例子:把字符串放在中间 效果:-----------------------alex----------------------- name='alex' print(name.center(50,"-")) #例子:判断字符串以什么为结尾,可用来判断邮件地址 email='abcd@qq.com' if email.endswith('.com'): print('true') else: print('false') #例子:定义\t的空格数 name='刘\t德华' print(name.expandtabs(tabsize=10)) #例子:找索引1 name='我的名字是刘德华' print(name.find('华')) #例子:找索引2 name='我的名字是刘德华' print(name.index('华')) #例子:模式字符串format_map name='my name is {name},i am {year} old' print(name.format_map({'name':'andy','year':52})) #例子:判断英文和数字,不包含特殊字符 效果:True name='abc123' print(name.isalnum()) #例子:判断纯英文 name='abc' print(name.isalpha()) #例子:判断整数 print('2541'.isdigit()) #True print('-9'.isdigit()) #False #例子:判断纯数字 print('123'.isnumeric()) #True print('10.2'.isnumeric()) #False #例子:判断是否合法的变量名 print('abc'.isidentifier()) #例子:判断小写 print('abc'.islower()) #True print('Abc'.islower()) #False #例子:判断大写 print('abc'.isupper()) #False print('Abc'.isupper()) #False print('ABC'.isupper()) #True #例子:判断是否首字母大写 print('Andy Is Name'.istitle()) #True print('Andy is Name'.istitle()) #False #例子:列表变字符串 name_list=['andy','alex','hui'] print(''.join(name_list)) #andyalexhui print(','.join(name_list)) #andy,alex,hui #例子:ljust,rjust print('abc'.ljust(50,'-')) #50个 不够在右边加- print('abc'.rjust(50,'-')) #50个 不够在左边加- #例子:大小写转换 print('abc'.upper()) print('ABC'.lower()) #例子:去空格回车 print(' abc '.strip()) #去两边 print(' abc '.lstrip()) #去左边 print(' abc '.rstrip()) #去右边 #例子:自定义加密解密 p_en=str.maketrans('abcdefghijklm','~!@#$%^&*()_+') #加密表 p_de=str.maketrans('~!@#$%^&*()_+','abcdefghijklm') #解密表 print('defklmabcd'.translate(p_en)) #加密 print('#$%)_+~!@#'.translate(p_de)) #解密 #例子:replace替换 print('alex li'.replace('l', 'L')) print('alex li'.replace('l', 'L',1)) #例子:切隔 print('alex li'.split()) print('alex+li'.split('+')) #例子:字符串中大写转小写,小写转大写 print('alex ABCDEFG li'.swapcase()) 例子:格式化字符串方法1 name=input('name:') age=input('age:') sex=input('sex:') address=input('address:') info='-----info of %s-----------\n name:%s \n age:%s \n sex:%s \n address:%s '%(name,name,age,sex,address) print(info) 例子:格式化字符串方法2 name=input('name:') age=input('age:') sex=input('sex:') address=input('address:') info='-----info of {0}-----------\n name:{0} \n age:{1} \n sex:{2} \n address:{3} '.format(name,age,sex,address) print(info) 例子:格式化字符串方法3 name=input('name:') age=input('age:') sex=input('sex:') address=input('address:') info='-----info of {_name}-----------\n name:{_name} \n age:{_age} \n sex:{_sex} \n address:{_address} '.format(_name=name,_age=age,_sex=sex,_address=address) print(info) 例子:长度 abc="123456789" print(len(abc)) 例子:切片前5 abc="123456789" print(abc[0:5]) #开始位包括,结束位不包括 例子:python3.0字符串转二进制和二进制转字符串 python3.0字符串默认为unincode abc="你好" abc_2=abc.encode(encoding='utf_8') #字符串转二进制 print(abc_2) ttt=abc_2.decode('utf-8') #二进制转字符串 print(ttt) 例子:字符串转二进制--2 a='国家' print(bytes(a,encoding='utf-8')) 例子utf8转gbk,python2.7 默认字符串为assic码 # -*- coding: utf-8 -*- 这个是文件编码 abc_utf8="你好" abc_unicode=abc_utf8.decode('utf_8') #转unicode abc_gbk=abc_unicode.encode('gbk') #unicode 转 gbk print(abc_gbk) #例子字符串打印颜色 # Python中字符串颜色 # 格式:\033[显示方式;前景色;背景色m # # 说明: # 前景色 背景色 颜色 # --------------------------------------- # 30 40 黑色 # 31 41 红色 # 32 42 绿色 # 33 43 黄色 # 34 44 蓝色 # 35 45 紫红色 # 36 46 青蓝色 # 37 47 白色 # 显示方式 意义 # ------------------------- # 0 终端默认设置 # 1 高亮显示 # 4 使用下划线 # 5 闪烁 # 7 反白显示 # 8 不可见 print('\033[5;33;44m this is test\033[0m') '''
例子变量
'''例子变量 name="韩孝辉" print("my name is %s,%s" %(name,"哈哈") ) 例子:删除变量 name="韩孝辉" print("my name is %s,%s" %(name,"哈哈") ) del name print(name) 例子:全局变量和局部变量 描述 : 全局与局部变量 在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。 当全局变量与局部变量同名时: 在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。 name='alex' #全局变量 def test(): name='fun in name' #局部变量, 函数里是不能修改string int ...全局变量的, list ...是可以修改的 print(name) test() print(name) 例子:函数内 修改全局变量 name='alex' def test(): global name name='fun in name' print(name) test() print(name) #例子,多变量赋值,左右两边要相称,不然会出错 a,b=0,1 #等号右边相当于元组 a,b=b,a+b #这步相当于 t=(b,a+b) a=t[0] b=t[1] print(a,b) '''
例子:列表
'''例子:列表 例子:列表切片,中间切 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] print(names[names.index('刘德华'):names.index('孙燕姿')]) 例子:列表取值,正取 索引从0开始 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] print(names[0]) 例子:列表取值,反取 索引从-1开始 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] print(names[-3]) 例子:列表取值,后三位 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] print(names[-3:]) 例子:列表取值,前三位 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] print(names[:3]) 例子:切片设置步长 l1=[0,1,2,3,4,5,6,7,8,9,10] print(l1[0:-1:2]) #从0到结束 2为步长 例子:追加,添加到最后面 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] names.append("abc") print(names) 例子:插入指定位置前面 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] names.insert(names.index('刘德华'),"abc") print(names) 例子:插入指定位置后面 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] names.insert(names.index('刘德华')+1,"abc") print(names) 例子:替换1 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] names[names.index('王五')]='123' print(names) 例子:删除1 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] names.remove('王五') print(names) 例子:删除2 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] del names[names.index('张三')] print(names) 例子:删掉最后一个,pop()方法是给索引删除,默认是最后一个 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] names.pop() print(names) 例子:删掉第三个,pop()方法是给索引删除,默认是最后一个 names=['张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] names.pop(3) print(names) 例子:统计数量 names=['刘德华','张三','李四','王五','赵六','刘德华','张学友','梁朝伟','孙燕姿'] print(names.count('刘德华')) 例子:排序 soce=[8,4,6,0,10] soce.sort() print(soce) 例子:反转 soce=[8,4,6,0,10] soce.sort() print(soce) soce.reverse() print(soce) 例子:浅复制,注意:只复制一层列表,如果列表里有列表。复制的是第二个列表的内存地址 names=['刘德华','张三','李四','王五',['alex','abc'],'赵六','刘德华','张学友','梁朝伟','孙燕姿'] name2=names.copy() names[0]='change刘德华' names[4][0]='ALEX' print(names) print(name2) 例子:深复制,完全独立的 import copy names=['刘德华','张三','李四','王五',['alex','abc'],'赵六','刘德华','张学友','梁朝伟','孙燕姿'] name2=copy.deepcopy(names) names[0]='change刘德华' names[4][0]='ALEX' print(names) print(name2) 例子:合并两个列表 l1=['a','b','c'] l2=[1,2,3,4] l1.extend(l2) print(l1) 例子:循环列表,带索引 produce_list=[ ('苹果手机',5888), ('三星手机',4999), ('华为手机',3888), ('苹果数据线',200), ('武侠小说',50), ('自行车',500) ] for index,item in enumerate(produce_list): print(index,item) 例子:列表生成式_快速生成列表 #方法1: a=[ x*2 for x in range(1,11)] print(a) #方法2:#列表里的元素都*2 b=map(lambda x:x*2, range(1,11)) print(b) for i in b: print(i) #方法3: li=range(10) print(li) for i in li: print(i) '''
例子元组
'''例子:元组 #说明,元组不能更改。相当于只读列表 例子:创建元组 names=('刘德华','张学友','郭富城','黎明') print(names) 例子:统计 names=('刘德华','张学友','郭富城','黎明') print(names.count('张学友')) 例子:获取值的索引 names=('刘德华','张学友','郭富城','黎明') print(names.choice('郭富城')) print(names[2]) '''
例子字典
'''例子字典 描述:字典是无序的,key尽量不要用中文,key是唯一的天生去重 #例子:查找1,key不存在会出错 info={ 'stu1':'刘德华', 'stu2':'张学友', 'stu3':'郭富城', 'stu4':'黎明', } print(info['stu1']) #例子:查找2,key不存在不会出错 info={ 'stu1':'刘德华', 'stu2':'张学友', 'stu3':'郭富城', 'stu4':'黎明', } print(info.get('stu1')) #例子:修改和添加。 #注意:如果key存在是修改,不存在为添加 info={ 'stu1':'刘德华', 'stu2':'张学友', 'stu3':'郭富城', 'stu4':'黎明', } info['stu1']='andy' #存在为修改 print(info) info['stu5']='孙燕姿' #不存在为添加 print(info) #例子:删除1 info={ 'stu1':'刘德华', 'stu2':'张学友', 'stu3':'郭富城', 'stu4':'黎明', } del info['stu4'] print(info) #例子:删除2 info={ 'stu1':'刘德华', 'stu2':'张学友', 'stu3':'郭富城', 'stu4':'黎明', } info.pop('stu4') print(info) #例子:删除3,随机删除 info={ 'stu1':'刘德华', 'stu2':'张学友', 'stu3':'郭富城', 'stu4':'黎明', } info.popitem() print(info) #例子:判断key是否存在 info={ 'stu1':'刘德华', 'stu2':'张学友', 'stu3':'郭富城', 'stu4':'黎明', } print('stu1' in info) #例子:多级嵌套 info={ 'stu1':{ 'name':'刘德华', 'age':50, 'desc':['歌神','影帝','不老男神'] }, 'stu2':{ 'name':'张学友', 'age':52, 'desc':['歌神','多情','有磁性'] }, } info.get('stu1').get('desc')[2]='已经老了' print(info) #例子:获取到所有key并循环打印 info={ 'stu1':{ 'name':'刘德华', 'age':50, 'desc':['歌神','影帝','不老男神'] }, 'stu2':{ 'name':'张学友', 'age':52, 'desc':['歌神','多情','有磁性'] }, } keys=info.keys() for index,key in enumerate(keys): print(index,key) #例子:获取到所有value并循环打印 info={ 'stu1':{ 'name':'刘德华', 'age':50, 'desc':['歌神','影帝','不老男神'] }, 'stu2':{ 'name':'张学友', 'age':52, 'desc':['歌神','多情','有磁性'] }, } values=info.values() for index,value in enumerate(values): print(index,value) #例子:setdefault.在字典里找key,如果存不则什么都不做。不存在就添加一个 info={ 'stu1':{ 'name':'刘德华', 'age':50, 'desc':['歌神','影帝','不老男神'] }, 'stu2':{ 'name':'张学友', 'age':52, 'desc':['歌神','多情','有磁性'] }, } info.setdefault('stu1',['abc','123']) print(info) #例子:合并字典,如果存在相同的key就修改,不存在的key就添加 info={ 'stu1':'刘德华', 'stu2':'张学友', } b={ 'stu1':'曾经拥有', 'stu2':'张学友', 1:2, 3:4, } info.update(b) print(info) #例子:dict.items(),返回一个列表。列表里有多个元组,每个元组就是字典的key,value info={ 'stu1':'刘德华', 'stu2':'张学友', 'key3':{ 'name':'abc', 'age':55, }, } print(info.items()) #例子:循环字典1,建议用这种,效率高 info={ 'stu1':'刘德华', 'stu2':'张学友', 'key3':{ 'name':'abc', 'age':55, }, } for i in info: print(i,info.get(i)) #例子:循环字典2,效率低,有个把字典转为元组的过程 info={ 'stu1':'刘德华', 'stu2':'张学友', 'key3':{ 'name':'abc', 'age':55, }, } for k,v in info.items(): print(k,v) #例子字典的排序 d={ 2:11, 6:8, -4:3 } print(sorted(d.items())) #按key排序 print(sorted(d.items(),key=lambda x:x[1])) #按值排序 '''
例子集合
#描述:集合是无序的 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中) #创建集合 set_1=set([0,1,2,3,0]) print(set_1,type(set_1)) #循环集合 set_1=set([0,1,2,3,0]) print(set_1,type(set_1)) for item in set_1: print(item) #交集。取出两个集合中相同的 set_1=set([1,2,3,4,5]) set_2=set([4,5,6,7,8,9]) same_set=set_1.intersection(set_2) print(same_set) #并集,去掉两个集合中相同的 set_1=set([1,2,3,4,5]) set_2=set([4,5,6,7,8,9]) union_set=set_1.union(set_2) print(union_set) #差集 求出 in list_1 but not in list_2 set_1=set([1,2,3,4,5]) set_2=set([4,5,6,7,8,9]) diff_set=set_1.difference(set_2) print(diff_set) #判断是否是子集。 set_1=set([1,2,3,4,5]) set_2=set([1,2,3,4,5,6,7,8,9]) print(set_1.issubset(set_2)) #set_1里的值,set_2是否都有 #判断是否是父集 set_1=set([1,2,3,4,5]) set_2=set([1,2,3,4,5,6,7,8,9]) print(set_2.issuperset(set_1)) #set_2 是否包含set_1 #对称差集,就是把列表1比列表2多的,列表2比列表1多的 都取出来 set_1=set([1,2,3,4,5,0,10]) set_2=set([1,2,3,4,5,6,7,8,9]) print(set_2.symmetric_difference(set_1)) #判断是否有交集,没有交集返回true set_1=set([1,2,3]) set_2=set([6,7,8,9]) print(set_1.isdisjoint(set_2)) #例子添加一项 set_1=set([1,2,3]) set_1.add(4) print(set_1) #例子添加多项 set_1=set([1,2,3]) set_1.update([4,5,6]) print(set_1) #例子删除1,此方法删除不存在的会报错 set_1=set([1,2,3]) set_1.remove(1) set_1. print(set_1) #例子删除2,删除不存在的不会报错 set_1=set([1,2,3]) set_1.discard(1) print(set_1) #随机删除一项 set_1=set([1,2,3]) print(set_1.pop()) #返回的是删除项 print(set_1) #求长度 set_1=set([1,2,3]) print(len(set_1)) #测试 item 是否是set的成员,取返是not in set_1=set([1,2,3]) print(3 in set_1) #浅复制 set_1=set([1,2,3]) set_2=set_1.copy() print(set_2)
常用模块
sys模块(python ceshi.py 1 2 3 程序传参)
''' #!usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2017年5月9日 @author: Administrator ''' import sys print(sys.argv) #命令行参数List,第一个元素是程序本身路径(例子, python ceshi.py arg1 arg2) sys.exit(n) 退出程序,正常退出时exit(0) print(sys.version) 获取Python解释程序的版本信息 print(sys.maxint) 最大的Int值 print(sys.path) 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 print(sys.platform) 返回操作系统平台名称 '''