这篇文章用来记录工作和学习过程中遇到的一些python常用api方法。
os模块#
os.walk()#
1 | os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) |
参数 top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。 - root 所指的是当前正在遍历的这个文件夹的本身的地址 - dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录) - files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。
onerror -- 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。 followlinks -- 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。
os.getenv(key, default = None)#
返回环境变量键的值(如果存在),否则返回默认值。
os.path.abspath(file)#
- 获取的当前执行脚本的完整路径
- 只有当在脚本中执行的时候,os.path.abspath(file)才会起作用,因为该命令是获取的当前执行脚本的完整路径,如果在交互模式或者terminate 终端中运行会报没有__file__这个错误
os.path.dirname(path)#
去掉文件名,返回目录
os.environ.get()#
是python中os模块获取环境变量的一个方法
getattr(object, name[, default])#
getattr() 函数用于返回一个对象属性值。 - object -- 对象。 - name -- 字符串,对象属性。 - default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。
shutil.copyfile(src, dst)#
复制文件内容(不包含元数据)从src到dst。 dst必须是完整的目标文件名; 如果src和dst是 同一文件,就会引发错误shutil.Error。 dst必须是可写的,否则将引发异常IOError。如果dst已经存在,它会被替换。
@property#
Python内置的@property装饰器就是负责把一个方法变成属性调用的.
1
2
3
4
5
6
7
8
9
10
11
12
13class Student(object):
@property
def score(self):
return self._score
@score.setter
def score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value1
2
3
4
5
6
7
8>>> s = Student()
>>> s.score = 60 # OK,实际转化为s.set_score(60)
>>> s.score # OK,实际转化为s.get_score()
60
>>> s.score = 9999
Traceback (most recent call last):
...
ValueError: score must between 0 ~ 100!
还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性:
1
2
3
4
5
6
7
8
9
10
11
12class Student(object):
@property
def birth(self):
return self._birth
@birth.setter
def birth(self, value):
self._birth = value
@property
def age(self):
return 2014 - self._birth
python中函数前添加*以及**的用法#
转自:http://blog.csdn.net/delphiwcdj/article/details/5746560 当要使函数接收元组或字典形式的参数 的时候,有一种特殊的方法,它分别使用*和**前缀 。这种方法在函数需要获取可变数量的参数 的时候特别有用。
[注意] [1] 由于在args变量前有*前缀 ,所有多余的函数参数都会作为一个元组存储在args中 。如果使用的是前缀 ,多余的参数则会被认为是一个字典的健/值对 。 [2] 对于def func(args):,args表示把传进来的位置参数存储在 tuple(元组)args里面。例如,调用func(1, 2, 3) ,args就表示(1, 2, 3)这个元组 。 [3] 对于 def func(args):,args表示把参数 作为字典的健-值对存储在dict(字典)args里面**。例如,调用func(a='I', b='am', c='wcdj') ,args就表示{'a':'I', 'b':'am', 'c':'wcdj'}这个字典 。 [4] 注意普通参数与*和**参数公用的情况,一般将*和**参数放在参数列表最后。
globals()#
以字典类型返回当前位置的全部全局变量
locals() 函数#
locals() 函数会 以字典类型返回当前位置的全部局部变量。 对于函数, 方法, lambda 函式, 类, 以及实现了 call 方法的类实例, 它都返回 True。
lambad函数用法#
####(1)直接赋给一个变量,然后再像一般函数那样调用
1
2
3
4c=lambda x,y,z:x*y*z
c(2,3,4)
241
2(lambda x:x**2)(3)
91
2
3
4
5
6
7
8fliter(lambda x:x%3==0,[1,2,3,4,5,6])
[3,6]
squares = map(lambda x:x**2,range(5)
print(lsit(squares))
[0,1,4,9,16]1
a=[('b',3),('a',2),('d',4),('c',1)]
1
2sorted(a,key=lambda x:x[0])
[('a',2),('b',3),('c',1),('d',4)]1
2sorted(a,key=lambda x:x[1])
[('c',1),('a',2),('b',3),('d',4)]1
2
3
4from functools import reduce
print(reduce(lambda a,b:'{},{}'.format(a,b),[1,2,3,4,5,6,7,8,9]))
1,2,3,4,5,6,7,8,91
2
3
4
5
6def increment(n):
return lambda x:x+n
f=increment(4)
f(2)
61
2
3
4x=(lambda x='Boo',y='Too',z='Z00':x+y+z)
print(x('Foo'))
'FooTooZoo'1
2
3
4
5
6import sys
from tkinter import Button,mainloop
x=Button(text='Press me',command=(lambda :sys.stdout.write('Hello,World\n')))
x.pack()
x.mainloop()1
2
3
4
5Names = ['Anne', 'Amy', 'Bob', 'David', 'Carrie', 'Barbara', 'Zach']
B_Name= filter(lambda x: x.startswith('B'),Names)
print(B_Name)
['Bob', 'Barbara']1
2
3
4
5a = [1,2,3,4]
b = [5,6,7,8]
print(list(map(lambda x,y:x+y, a,b)))
[6,8,10,12]1
2
3
4
5sentence = "Welcome To Beijing!"
words = sentence.split()
lengths = map(lambda x:len(x),words)
print(list(lengths))
[7,2,8]
for else结构#
for else 结构还是第一次见,于是记录一下。如果for循环 正常结束,else中语句执行。如果是 break的,则 不执行。
简单使用场景:寻找100以内的素数之和
(这个应该是较暴力算法,这里不讨论算法问题)
1
2
3
4
5
6
7
8sum=0
for n in range(2,100):
for i in range(2,n):
if n%i==0: # 不是素数
break
else:
sum+=n # 加上素数
print(sum)
善用三目运算#
1 | num = 3 if res > 3 else 1 |
接受动态参数sys.argv#
1 | # test.py |
1 | python test.py 1 2 3 4 5 |
binascii --- 二进制和 ASCII 码互转#
binascii介绍 ###
返回二进制数据 data 的十六进制表示形式
1
2binascii.b2a_hex(data[, sep[, bytes_per_sep=1]])
binascii.hexlify(data[, sep[, bytes_per_sep=1]])
返回由十六进制字符串 hexstr 表示的二进制数据#
1 | binascii.a2b_hex(hexstr) |
此函数功能与 b2a_hex() 相反。 hexstr 必须包含 偶数个十六进制数字(可以是大写或小写),否则会引发 Error 异常。
zlip#
字符串:使用 zlib.compress可以压缩字符串。使用 zlib.decompress可以解压字符串。
数据流:压缩:compressobj,解压:decompressobj
cPickle#
cPickle.dump#
将python对象序列化
1
cPickle.dump(obj, file, protocol=None, *, fix_imports=True, buffer_callback=None)
cPickle.load#
载入本地文件,恢复python对象
1
>>> data = cPickle.load(open("test\\data.pkl","rb"))
cPickle.dumps#
将python对象序列化保存到一个字符串变量中
1
>>> data_string = cPickle.dumps(data)
cPickle.loads#
从字符串变量中载入python对象
1
>>> data = cPickle.loads(data_string)
pyflakes#
检查加载字符串代码是否有错
1
2
3from pyflakes.api import checkCode
a = f.read()
checkCode(a, my_Reporter(sys.stdout, sys.stderr)) # my_Reporter是pyflakes.reporter的拓展