1. 匿名函数
1.1 有名函数
有名函数:定义了一个函数名,函数名指向内存地址;通过函数名进行访问。函数名加括号就可以运行有名函数,例如:func()
def func(x, y, z = 1):
return x + y + z
print(func(1,5,2))
1.2 匿名函数
匿名函数:没有名字的函数,定义的时候不需要函数名;定义匿名函数的关键字是:lambda
特点:
1.没有函数名
2.函数自带return
应用场景:
1.应用于一次性的地方
2.临时使用
salaries={
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}
# 打印工资最高的人名,利用匿名函数很好的解决此问题
print(max(salaries,key=lambda name:salaries[name]))
2. 内置函数
官方内置函数网址:https://docs.python.org/3/library/functions.html
2.1 概览
aaarticlea/png;base64,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" alt="" width="698" height="404" />
2.2 abs all any
1.abs 求绝对值
2.all 可迭代对象取出所有值,进行判断,所有为真就返回True
如果可迭代对象为空,返回True 例如:all([])
3.any
可迭代对象取出所有值,进行判断,任何一个为真就返回True
如果可迭代对象为空,返回False 例如:any([])
print(abs(-100))
print(all([1,-20,None])) # 只要有一个为假,返回False
print(all([1,-20,"a"])) # 只要所有为真,返回True
print(all([])) # 可迭代对象为空,返回True print(any([1,-20,None])) # 只要有一个为真,返回True
print(any([])) # 可迭代对象为空,返回False print(any(['',None,False])) #所有为假,返回False
2.3 bool
bool值为假的情况
1.None
2.空
3.False
4.0
2.4 bin oct hex
1.bin 十进制转换为二进制
2.oct 十进制转换为八进制
3.hex十进制转化为十六进制
print(bin(10)) # 0b1010
print(oct(10)) # 0o12
print(hex(10)) # 0xa
2.5 bytes
print('hello'.encode('utf-8')) # unicode----encode----->bytes
print(bytes('hello',encoding='utf-8')) # 利用bytes把unicode转化为bytes
2.6 callable
callable:判断一个对象是否可调用,是否可用加括号运行的,例如:函数
print(callable(bytes))
print(callable(abs))
2.7 chr ord
chr:用一个十进制数字,利用chr函数,转换为一个ascii表中的一个字符
ord:字符转化为数字
A—Z 65到90
print(chr(65)) # A
print(chr(90)) # Z
print(ord('H')) #
2.8 数据类型
内置函数,又被称为工厂函数
目前了解的数据类型如下:
1.int 整形
2.complex 复数
3.float 浮点
4.str 字符串
5.list 列表
6.tuple 元组
7.dict 字典
8.set 可变集合
9.frozenset 不可变集合
x=1 #x=int(1)
print(type(x)) # <class 'int'>
x=int(2) s={1,2,3,4} #s=set({1,2,3,4})
print(type(s)) # <class 'set'> s1=frozenset({1,2,3,4})
print(type(s1)) # <class 'frozenset'>
2.9 dir
利用dir,可以查看一个模块可以调用的属性和方法
import sys
sys.path # path是sys的属性
print(dir(sys)) # 查看sys点可以调用的属性和方法
2.10 divmod
利用divmod,获得被除数除以除数,得到商和余数
print(divmod(10,3)) # (3, 1)
print(divmod(102,20)) # (5, 2)
2.11 enumerate
enumerate,把一个可迭代对象,生成一个迭代器
l=['a','b','c']
res = enumerate(l)
for i in res:
print(i)
for index,item in enumerate(l):
print(index,item)
2.12 hash
hash,校验一个字符串值,只要字符串的值一样,hash结果就一样
print(hash('abcdefg123')) # hash 结果为:-203804489563080217
print(hash('abcdefg123')) # hash 结果为:-203804489563080217
print(hash('abcdefg123')) # hash 结果为:-203804489563080217
2.13 help
利用help,查看函数的文档信息;给函数加文档解释,用到单引号,双引号,三引号
def func():
'''
test function
:return:
'''
pass print(help(func))
2.14 id
id:是python解释器实现的功能,只是反映了变量在内存的地址,但并不是真实的内存地址
x=1
print(id(x)) def func():pass
print(id(func))
print(func) # 最精准的内存地址反映
2.15 isinstance
isinstance,判断一个变量是否属于一个数据类型
x=1
print(type(x) is int)
print(isinstance(x,int))
2.16 max min
max:求最大值,同类型之间进行比较
min:求最小值,同类型之间进行比较
print(max([1,2,3,10]))
print(max(['a','b']))
print(min([1,2,3,10]))
2.17 pow
pow求幂运算
print(pow(3,5))
print(pow(3,2,2)) #3**2%2
2.18 repr str
repr、str都是把数字转化为字符串
repr:给解释器用的
str: 给用户用的
print(type(str(100))) # 输出结果: <class 'str'>
print(type(repr(100))) # 输出结果: <class 'str'>
2.19 reversed
reversed:反转,也就是倒排序
l=[1,'a',2,'c']
print(list(reversed(l))) # ['c', 2, 'a', 1] 反转产生新列表,并不反转原列表
print(l) # [1, 'a', 2, 'c']
2.20 round
利用round,保留小数位数,并进行四舍五入
示例
print(round(2.764,2)) # 运行结果:2.76
print(round(2.768,2)) # 运行结果:2.77
2.21 slice
slice,是切片的意思,调用slice函数,生产切片对象,方便进行重用,为很多列表所用。
l=[1,2,3,4,5,6]
print(l[0:4:2]) s=slice(0,4,2)
print(l[s])
2.22 sorted
排序,同类型之间进行排序
l=[1,10,4,3,-1]
print(sorted(l)) # 排序,从小到大排序,运行结果:[-1, 1, 3, 4, 10]
print(sorted(l,reverse=True)) #从大到小排序,运行结果:[10, 4, 3, 1, -1]
2.23 sum
利用sum求和
print(sum([1, 2,3]))
print(sum(i for i in range(10)))
2.24 zip
zip拉链,把两个序列类型生成一个小元组列表
s='hello'
l=[1,2,3,4,5]
print(list(zip(s,l))) # 运行结果:[('h', 1), ('e', 2), ('l', 3), ('l', 4), ('o', 5)]
2.25 __import__
__import__,导入模块,把字符串转化为模块类型
m_name=input('module>>: ')
if m_name == 'sys':
m=__import__(m_name)
print(m)
print(m.path) sys=__import__('sys')
print(sys)
2.26 内置函数补充
薪资字典
salaries={
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}
2.26.1 max
获取薪资最大的人名
print(max(salaries,key=lambda name:salaries[name]))
print(min(salaries,key=lambda name:salaries[name]))
内置函数max、min的实质是通过循环,比较最大值和最小值,只是默认比较key,可以通过函数的第二个参数key选择比较value值
通过max内部实现机制:通过for循环,只获取一个值,传给匿名函数lambda name:salaries[name]),把执行结果作为比较依据,然后进行比较,比较的依据是max的第二个参数的运行结果
salaries={
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
} # 利用zip实现需求,十分复杂
# 知识储备
t1=(10000000,'alex')
t2=(3000,'egon')
print(t1 > t2) # 运行结果:True
print(max(salaries)) # 最大的name值,运行结果:yuanhao
print(max(salaries.values())) # 最大的values值,运行结果:100000000
# 取出name和value,利用zip转为元组,最后进行比较
print(max(zip(salaries.values(),salaries.keys()))[1]) def get_value(name):
return salaries[name]
print(max(salaries,key=get_value)) print(max(salaries,key=lambda name:salaries[name])) # 薪资最大的人名:alex
print(min(salaries,key=lambda name:salaries[name])) # 薪资最小的人名:yuanhao
2.26.2 sorted
比较薪资从小到大的人名
salaries = {
"egon":3000,
"alex":100000000,
"wupeiqi":100000,
"yuanhao":2000,
}
def get_value(name):
return salaries[name]
print(sorted(salaries,key=get_value)) # 运行结果: ['yuanhao', 'egon', 'wupeiqi', 'alex']
print(sorted(salaries,key=lambda name:salaries[name],reverse=True)) #运行结果:['alex', 'wupeiqi', 'egon', 'yuanhao']
2.26.3 map
filter、map、reduce,都是对一个集合进行处理;filter很容易理解用于过滤,map用于映射,reduce用于归并. 是Python列表方法的三架马车。
map函数:func作用于给定序列的每个元素,并用一个列表来提供返回值
names=['alex','wupeiqi','yuanhao','yanglei','egon']
res=map(lambda x:x if x == 'egon' else x+'SB',names)
print(res) # 运行结果:<map object at 0x0000000002219B70>
print(list(res)) # 运行结果:['alexSB', 'wupeiqiSB', 'yuanhaoSB', 'yangleiSB', 'egon'] N1=[1,2,3]
N2=[6,5,4]
print(list(map(lambda x,y:x+y,N1,N2))) # 运行结果:[7, 7, 7]
print(list(map(lambda x:x+3,N1))) # 运行结果:[4, 5, 6]
2.26.4 reduce
reduce函数:func为二元函数,将func作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值
from functools import reduce
print(reduce(lambda x,y:x+y,range(101),100)) # 运行结果:5150
print(reduce(lambda x,y:x+y,range(101))) # 运行结果:5050 # 用map和reduce实现5的阶乘相加(5!+4!+3!+2!+1!)
print(reduce(lambda x,y:x*y,range(1,6)))
print(reduce(lambda x,y:x*y,range(1,5)))
print(reduce(lambda x,y:x*y,range(1,4)))
print(reduce(lambda x,y:x*y,range(1,3)))
print(reduce(lambda x,y:x*y,range(1,2)))
#把上一步的结果变成一个阶乘列表
print(list(map(lambda a:reduce(lambda x,y:x*y,range(1,a+1)),range(1,6)))) # 运行结果:[1, 2, 6, 24, 120]
#最后把阶乘列表相加
print(reduce(lambda m,n:m+n,map(lambda a:reduce(lambda x,y:x*y,range(1,a+1)),range(1,6)))) # 运行结果:153
2.26.5 filter
filter函数的功能相当于过滤器。调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列。
names=['alex_SB','wupeiqi_SB','yuanhao_SB','yanglei_SB','egon']
print(list(filter(lambda name:name.endswith('SB'),names))) # 运行结果:['alex_SB', 'wupeiqi_SB', 'yuanhao_SB', 'yanglei_SB'] N=range(10)
print(list(filter(lambda x:x>5,N))) # 运行结果:[6, 7, 8, 9]
3. 正则表达式
3.1 概览
模式 |
描述 |
\w |
匹配字母数字下划线 |
\W |
匹配非字母数字下划线 |
\s |
匹配任意空白字符,等价于[\t\n\r\f] |
\S |
匹配任意非空字符 |
\d |
匹配任意数字,等价于[0-9] |
\D |
匹配任意非数字 |
\A |
匹配字符串开始 |
\Z |
匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 |
\z |
匹配字符串结束 |
\G |
匹配最后匹配完成的位置 |
\n |
匹配一个换行符 |
\t |
匹配一个制表符 |
^ |
匹配字符串开头 |
$ |
匹配字符串的结尾 |
. |
匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。 |
[…] |
用来表示一组字符,单独列出:[amk]匹配’a’,’m’或者’k’ |
[^…] |
不在[]中的字符:[^abc]匹配除了a,b,c之外的字符 |
* |
匹配0个或多个的表达式 |
+ |
匹配1个或多个的表达式 |
? |
匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
{n} |
精准匹配n个前面表达式 |
{n,m} |
匹配n到m次,由前面的曾泽表达式定义的片段,贪婪方式 |
a|b |
匹配a或则b |
() |
匹配括号内的表达式,也表示一个组 |
3.2 基本正则
import re
print(re.findall('\w','hello_ | egon 123')) # 运行结果:['h', 'e', 'l', 'l', 'o', '_', 'e', 'g', 'o', 'n', '1', '2', '3']
print(re.findall('\W','hello_ | egon 123')) # 运行结果:[' ', '|', ' ', ' ']
print(re.findall('\s','hello_ | egon 123 \n \t')) # 运行结果:[' ', ' ', ' ', ' ', '\n', ' ', '\t']
print(re.findall('\S','hello_ | egon 123 \n \t')) # 运行结果:['h', 'e', 'l', 'l', 'o', '_', '|', 'e', 'g', 'o', 'n', '1', '2', '3']
print(re.findall('\d','hello_ | egon 123 \n \t')) # 运行结果:['1', '2', '3']
print(re.findall('\D','hello_ | egon 123 \n \t')) # 运行结果:['h', 'e', 'l', 'l', 'o', '_', ' ', '|', ' ', 'e', 'g', 'o', 'n', ' ', ' ', '\n', ' ', '\t']
print(re.findall('h','hello_ | hello h egon 123 \n \t')) # 运行结果:['h', 'h', 'h']
print(re.findall('\Ahe','hello_ | hello h egon 123 \n \t')) # 运行结果:['he']
print(re.findall('^he','hello_ | hello h egon 123 \n \t')) # 运行结果:['he']
print(re.findall('123\Z','hello_ | hello h egon 123 \n \t123')) # 运行结果:['123']
print(re.findall('123$','hello_ | hello h egon 123 \n \t123')) # 运行结果:['123']
print(re.findall('\n','hello_ | hello h egon 123 \n \t123')) # 运行结果:['\n']
print(re.findall('\t','hello_ | hello h egon 123 \n \t123')) # 运行结果:['\t']
3.3 . [] [^]
.本身代表任意一个字符
[]内部可以有多个字符,但是本身只配多个字符中的一个
[^…]不在[]中的字符:[^abc]匹配除了a,b,c之外的字符
import re
#.本身代表任意一个字符
print(re.findall('a.c','a a1c a*c a2c abc a c aaaaaac')) # 运行结果:['a1c', 'a*c', 'a2c', 'abc', 'a c', 'aac']
print(re.findall('a.c','a a1c a*c a2c abc a\nc',re.DOTALL)) # 运行结果:['a1c', 'a*c', 'a2c', 'abc', 'a\nc']
print(re.findall('a.c','a a1c a*c a2c abc a\nc',re.S)) #运行结果:['a1c', 'a*c', 'a2c', 'abc', 'a\nc'] #[]内部可以有多个字符,但是本身只配多个字符中的一个
print(re.findall('a[0-9][0-9]c','a a12c a1c a*c a2c a c a\nc',re.S)) #运行结果: ['a12c']
print(re.findall('a[a-zA-Z]c','aac abc aAc a*c a2c a c a\nc',re.S)) #运行结果:['aac', 'abc', 'aAc']
#[^…]不在[]中的字符:[^abc]匹配除了a,b,c之外的字符
print(re.findall('a[^a-zA-Z]c','aac abc aAc a*c a2c a c a\nc',re.S)) #运行结果:['a*c', 'a2c', 'a c', 'a\nc']
print(re.findall('a[\+\/\*\-]c','a-c a+c a/c a1c a*c a2c a\nc',re.S)) #运行结果:['a-c', 'a+c', 'a/c', 'a*c']
3.4 \:转义
原生字符串r rawstring;正则表达式前面加r,表示原生的
import re
#\:转义 r代表rawstring
print(re.findall(r'a\\c','a\c abc')) # 运行结果['a\\c']
3.5 ? * + {}
? * + {}:左边有几个字符,如果有的话,贪婪匹配
?左边那一个字符有0个或者1个
*左边那一个字符有0个或者无穷个
+左边那一个字符有1个或者无穷个
{n,m}左边的字符有n-m次
import re
#? * + {}:左边有几个字符,如果有的话,贪婪匹配
#?左边那一个字符有0个或者1个
print(re.findall('ab?','aab a ab')) # 运行结果: ['a', 'ab', 'a', 'ab'] #*左边那一个字符有0个或者无穷个
print(re.findall('ab*','a ab abb abbb abbbb')) # 运行结果:['a', 'ab', 'abb', 'abbb', 'abbbb']
print(re.findall('ab{0,}','a ab abb abbb abbbb')) # 运行结果:['a', 'ab', 'abb', 'abbb', 'abbbb'] #+左边那一个字符有1个或者无穷个
print(re.findall('ab+','a ab abb abbb abbbb')) # 运行结果:['ab', 'abb', 'abbb', 'abbbb']
print(re.findall('ab{1,}','a ab abb abbb abbbb')) # 运行结果:['ab', 'abb', 'abbb', 'abbbb'] #{n,m}左边的字符有n-m次
print(re.findall('ab{3}','a ab abb abbb abbbb')) # 运行结果:['abbb', 'abbb']
print(re.findall('ab{2,3}','a ab abb abbb abbbb')) # 运行结果:['abb', 'abbb', 'abbb']
3.6 .* .*?
import re
# .* .*?
#.*贪婪匹配,匹配所有字符
print(re.findall('a.*c','a123c456c')) # 运行结果:['a123c456c']
#.*?非贪婪匹配,获取最短的
print(re.findall('a.*?c','a123c456c')) # 运行结果:['a123c']
3.7 |
| 表示或者,左侧条件成立,不会匹配右侧条件;左侧条件不成立,才匹配右侧条件
print(re.findall('company|companies','Too many companies have gone bankrupt, and the next one is my company')) # 运行结果:['companies', 'company']
3.8 ():分组
import re
# (ab),匹配成功,显示组内内容ab
# (?:ab) 匹配成功,显示匹配最完全的内容
print(re.findall('ab+','abababab123')) # 运行结果:['ab', 'ab', 'ab', 'ab']
print(re.findall('ab+123','abababab123')) # 运行结果:['ab123'] print(re.findall('ab','abababab123')) # 运行结果:['ab', 'ab', 'ab', 'ab']
print(re.findall('(ab)','abababab123')) # 运行结果:['ab', 'ab', 'ab', 'ab']
print(re.findall('(a)b','abababab123')) # 运行结果:['a', 'a', 'a', 'a']
print(re.findall('a(b)','abababab123')) # 运行结果:['b', 'b', 'b', 'b']
print(re.findall('(ab)+','abababab123')) # 运行结果:['ab']
print(re.findall('(?:ab)+','abababab123')) # 运行结果:['abababab'] print(re.findall('(ab)+123','abababab123')) # 运行结果:['ab']
print(re.findall('(?:ab)+123','abababab123')) # 运行结果:['abababab123']
print(re.findall('(ab)+(123)','abababab123')) # 运行结果:[('ab', '123')] print(re.findall('compan(y|ies)','Too many companies have gone bankrupt, and the next one is my company')) # 运行结果:['ies', 'y']
print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company')) # 运行结果:['companies', 'company']
4. 模块
4.1 re模块
4.1.1 findall
匹配成功,接着匹配,查找匹配成功的所有内容
print(re.findall('ab','abababab123')) # 运行结果:['ab', 'ab', 'ab', 'ab']
4.1.2 search
匹配成功一次,直接返回;只找到匹配成功一次结果。利用group查看内容
print(re.search('ab','ababab123').group()) # 运行结果:ab
print(re.search('ab','12aasddds')) # 运行结果:None
print(re.search('ab','12aasab3ss').group()) # 运行结果:ab
4.1.3 match
从开头开始查找,可以用search代替
print(re.search('ab','123ab456'))
print(re.match('ab','123ab456')) # 等价于print(re.search('^ab','123ab456'))
4.1.4 split
切分
print(re.split('b','abcde')) # 运行结果:['a', 'cde']
# 利用a切分之后,再用b进行切分
print(re.split('[ab]','abcde')) # 运行结果:['', '', 'cde']
4.1.5 sub
sub:替换
print(re.sub('alex','SB','alex make love alex alex')) # 运行结果:SB make love SB SB
# 指定替换次数
print(re.sub('alex','SB','alex make love alex alex',2)) # 运行结果:SB make love SB alex
print(re.subn('alex','SB','alex make love alex alex',2)) # 运行结果:('SB make love SB alex', 2) print(re.sub('(\w+)( .* )(\w+)',r'\3\2\1','alex make love'))# 运行结果:love make alex
4.2 time模块
三种形式的时间:时间戳、结构化时间、格式化的字符串时间
各种时间之间的转换关系
aaarticlea/png;base64,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" alt="" />
import time print(time.time()) #时间戳, 运行结果:1502011120.8090527
print(time.strftime('%Y-%m-%d %X')) # 格式化字符串时间 运行结果:2017-08-06 17:18:40 print(time.localtime()) # 格式化时间运行结果:time.struct_time(tm_year=2017, tm_mon=8, tm_mday=6, tm_hour=17, tm_min=18, tm_sec=40, tm_wday=6, tm_yday=218, tm_isdst=0)
print(time.gmtime()) #UTC 运行结果:time.struct_time(tm_year=2017, tm_mon=8, tm_mday=6, tm_hour=9, tm_min=18, tm_sec=40, tm_wday=6, tm_yday=218, tm_isdst=0)
print(time.localtime().tm_mon) # 运行结果:8 print(time.localtime(123123123)) # 运行结果:time.struct_time(tm_year=1973, tm_mon=11, tm_mday=26, tm_hour=8, tm_min=52, tm_sec=3, tm_wday=0, tm_yday=330, tm_isdst=0)
print(time.gmtime(123123123)) # 运行结果:time.struct_time(tm_year=1973, tm_mon=11, tm_mday=26, tm_hour=0, tm_min=52, tm_sec=3, tm_wday=0, tm_yday=330, tm_isdst=0) print(time.mktime(time.localtime())) # 运行结果:1502011120.0
print(time.strftime('%Y',time.gmtime())) # 运行结果:2017 print(time.strptime('2017-03-01','%Y-%m-%d')) # 运行结果:time.struct_time(tm_year=2017, tm_mon=3, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=60, tm_isdst=-1) print(time.ctime(12312312)) # 运行结果:Sat May 23 20:05:12 1970
print(time.asctime(time.gmtime())) # 运行结果:Sun Aug 6 09:18:40 2017
4.3 random
import random print(random.random()) # (0,1)----float 大于0且小于1之间的小数
print(random.randint(1, 3)) # [1,3] 大于等于1且小于等于3之间的整数
print(random.randrange(1, 3)) # [1,3) 大于等于1且小于3之间的整数
print(random.choice([1, '', [4, 5]])) # 1或者23或者[4,5]
print(random.sample([1, '', [4, 5]], 2)) # 列表元素任意2个组合
print(random.uniform(1, 3)) # 大于1小于3的小数,如1.927109612082716
item = [1, 3, 5, 7, 9]
random.shuffle(item) # 打乱item的顺序,相当于"洗牌"
print(item)
生成随机验证码
import random def make_code(n):
res = ""
for i in range(n):
s1 = str(random.randint(0,9))
s2 = chr(random.randint(65,90))
res += random.choice([s1,s2])
return res print(make_code(10)) # 运行结果:92324635B3
4.4 os模块
os模块是与操作系统交互的一个接口
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
示例:
import os print(os.listdir('.'))
print(os.stat('m1.py').st_size) print(os.sep)
print(os.linesep)
print(os.pathsep) print([os.sep,os.linesep,os.pathsep]) res=os.system('dir .') # 运行结果:返回命令执行结果 print(os.path.dirname(r'C:\a\b\c\d\a.txt')) # 运行结果:C:\a\b\c\d
print(os.path.basename(r'C:\a\b\c\d\a.txt'))# 运行结果:a.txt
print(os.path.split(r'C:\a\b\c\d\a.txt')) # 运行结果:('C:\\a\\b\\c\\d', 'a.txt') print(os.stat('m1.py').st_atime) # 运行结果:1502012851.6810527
print(os.stat('m1.py').st_size) # 运行结果:49
print(os.path.getsize('m1.py')) # 运行结果:49 print(os.path.join('C:\\','a','b','c','d.txt')) # 运行结果:C:\a\b\c\d.txt
print(os.path.join('C:\\','a','b','D:\\','c','d.txt')) # 运行结果:D:\c\d.txt print(os.path.normcase('c:/wiNdows\\system32\\')) # 运行结果:c:\windows\system32\ print(os.path.normpath('c://wIndows\\System32\\../Temp/')) # 运行结果:c:\wIndows\Temp a='/Users/jieli/test1/\\\a1/\\\\aa.py/../..'
print(os.path.normpath(a)) # 运行结果:\Users\jieli\test1 print(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # 运行结果:D:\python\code\Learning BASE_DIR=os.path.normpath(os.path.join(
os.path.abspath(__file__),
'..',
'..'
)
)
print(BASE_DIR) # 运行结果:D:\python\code\Learning
4.5 Sys模块
4.5.1 介绍
1 sys.argv 命令行参数List,第一个元素是程序本身路径
2 sys.exit(n) 退出程序,正常退出时exit(0)
3 sys.version 获取Python解释程序的版本信息
4 sys.maxint 最大的Int值
5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
6 sys.platform 返回操作系统平台名称
4.5.2 sys.stdout实现进度条
import sys,time for i in range(1,100):
sys.stdout.write('\r%s' %('#'*i))
sys.stdout.flush()
time.sleep(0.5)
4.5.3 print实现进度条实现
import sys,time
for i in range(1,100):
print('\r%s' %('#'*i),file=sys.stdout,flush=True,end='')
time.sleep(0.05)
4.5.4进度条应用
知识储备
# 通过传入参数,指定滚动条的固定宽度 print('<%s>' %'hello')
print('<%-10s>' %'hello') print('<%-10s>' %'#')
print('<%-10s>' %'##')
print('<%-10s>' %'###')
print('<%-10s>' %'####')
print('<%-10s>' %'#####') width=20
print('<%%-%ds>' %width) #<%-10s>
print(('<%%-%ds>' %width) %('hello')) # <%-10s> %('hello') print(('[%%-%ds]' %width) %('#'))
print(('[%%-%ds]' %width) %('##'))
print(('[%%-%ds]' %width) %('###'))
实现打印进度条函数
import sys,time
def progress(percent,width=50):
if percent >= 100:
percent=100
show_str=('[%%-%ds]' %width) %(int(width*percent/100)*'#')
print('\r%s %d%%' %(show_str,percent),file=sys.stdout,flush=True,end='') total_size=80251
recv_size=0 while recv_size < total_size:
time.sleep(0.3) #模拟下载的网络延迟
recv_size+=1024
recv_per=int(100*recv_size/total_size)
progress(recv_per,width=50)
4.6 序列化
为什么要序列化?
1.持久保存状态
2.跨平台数据交互
4.6.1 json
JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:
import json
dic={'name':'egon','age':18}
# 利用dumps序列化
print(type(json.dumps(dic)))
with open('a.json','w') as f:
f.write(json.dumps(dic))
# 利用loads反序列化
with open('a.json','r') as f:
data=f.read()
dic=json.loads(data)
print(dic['name']) dic={'name':'egon','age':18}
# 利用dump序列化
json.dump(dic,open('b.json','w'))
# 利用load反序列化
print(json.load(open('b.json','r'))['name'])
4.6.2 pickle
Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系。
import pickle dic={'name':'egon','age':18}
# dumps序列化
print(pickle.dumps(dic))
with open('d.pkl','wb') as f:
f.write(pickle.dumps(dic))
# loads反序列化
with open('d.pkl','rb') as f:
dic=pickle.loads(f.read())
print(dic['name']) dic={'name':'egon','age':18}
# dump序列化
pickle.dump(dic,open('e.pkl','wb'))
# load反序列化
print(pickle.load(open('e.pkl','rb'))['name'])
利用pickle进行序列化python的函数,然后进行反序列化
import pickle def func():
print('反序列化的文件') # 利用dump把函数进行序列化
pickle.dump(func,open('func.pkl','wb'))
# 利用load把函数进行反序列化
f=pickle.load(open('func.pkl','rb'))
print(f)
f()
4.7 shelve模块
shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型
4.7.1 序列化
import shelve # 进行序列化
f=shelve.open(r'sheve.shl')
f['alex']={'age':28,'pwd':'alex3714'}
f['egon']={'age':18,'pwd':''}
f.close()
4.7.2 反序列化
import shelve obj=shelve.open(r'sheve.shl') print(obj['alex'])
print(obj['egon']) for i in obj:
print(i,obj[i])
obj.close()