python零碎知识点
近来在复现Meta-SR,写这系列总结相当于备忘录,记录每天遇到的一些python语法知识点,为方便日后不断复习(小白在成长)
1. open()函数
open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。
常见的写入模式:
a | 如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
---|---|
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
– | – |
2. vars()与getattr()
vars() 函数返回对象object的属性和属性值的字典对象。
getattr()函数用于返回一个对象某个属性值。
open_type = 'a' # 文件打开模式
self.log_file = open(self.dir + '/log.txt', open_type) # open对象
with open(self.dir + '/config.txt', open_type) as f:
for arg in vars(args): # # vars() 函数返回对象object的属性和属性值的字典对象。
f.write('{}: {}\n'.format(arg, getattr(args, arg))) # getattr() 函数用于返回一个对象属性值。
f.write('\n')
本例中,args是一个object对象;vars(args)
返回一个字典;arg
是字典中的key值;getattr(args, arg)
返回arg对应的属性值。
3. asarray() 与 array()
out = numpy.asarray(list) # not copy
# or
out = numpy.array(list) # 默认会copy一份数据
# 将数据结构(list,tuple等)转化为numpy.ndarray;
4.rgb<–>bgr
opencv读入的图片默认是bgr形式;可以通过此方法转化为通用的rgb形式。
rgb = img[...,::-1]
5.os模块
os模块是python中最常用的文件操作模块之一。十分好用!
os.listdir()
files = os.listdir(path) # 以list形式返回path路径下所有文件,
os.path.splitext()
用来分离文件名与扩展名
path_01='D:/User/wgy/workplace/data/notMNIST_large.tar.gar'
path_02='D:/User/wgy/workplace/data/notMNIST_large'
root_01=os.path.splitext(path_01)
root_02=os.path.splitext(path_02)
dir,file = os.path.split(path_01)
print(root_01)
print(root_02)
print(dir)
print(file)
结果:
# 返回tuple
('D:/User/wgy/workplace/data/notMNIST_large.tar', '.gar')
('D:/User/wgy/workplace/data/notMNIST_large', '')
D:/User/wgy/workplace/data
notMNIST_large.tar.gar
os.path常用模块:
python中os.path常用模块
os.path.sep:路径分隔符 linux下就用这个了’/’
os.path.altsep: 根目录
os.path.curdir:当前目录
os.path.pardir:父目录
os.path.abspath(path):绝对路径
os.path.join(): 常用来链接路径
os.path.split(path): 把path分为目录和文件两个部分,以list返回
os.path.splitext(path)
6.os.walk()遍历
os.walk()用类似于 深度遍历 的方式遍历文件夹中的子文件夹以及文件。以tuple形式返回(root_path,[file_dirs],[files])
os.walk()本身是一个生成器对象
path = /home/wyl/pointer
for path,file_dirs,files in os.walk(path):
for dir in dirs:
for img_path, _, files in os.walk(path + '/' + dir):
for file in files:
print(str(i) +' ' + file)
i += 1
7.generator生成器
函数有了yield之后,函数名+()就变成了生成器。为什么叫生成器函数?因为它随着时间的推移生成了一个数值队列。一般的函数在执行完毕之后会返回一个值然后退出,但是生成器函数会自动挂起,然后重新拾起急需执行,他会利用yield关键字关起函数,给调用者返回一个值,同时保留了当前的足够多的状态,可以使函数继续执行,生成器和迭代协议是密切相关的,迭代器都有一个__next__()__成员方法,这个方法要么返回迭代的下一项,要买引起异常结束迭代。
博客说明:https://www.cnblogs.com/wj-1314/p/8490822.html
def fib(max): # 生成器函数
n,a,b=0,0,1
while n<max:
yield b # 返回b,并自动挂起
a,b=b,a+b
n=n+1
return 'done'
a=fib(10)
for i in a: # 生成器与迭代器的配合使用
print(i)