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 或 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 ...
")
        fn.write("this is ceshi 22222 ...
")
        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')
    
#例子:定义	的空格数
name='刘	德华'
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-----------
 name:%s 
 age:%s 
 sex:%s 
 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}-----------
 name:{0} 
 age:{1} 
 sex:{2} 
 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}-----------
 name:{_name} 
 age:{_age} 
 sex:{_sex} 
 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('33[5;33;44m this is test33[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)       返回操作系统平台名称
'''
原文地址:https://www.cnblogs.com/hanxiaohui/p/9854491.html