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) 返回操作系统平台名称
'''