python 语法

1.遍历目录 os.walk()

import os
for root, dirs, files in os.walk(path):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))

2.随机打乱列表:random

import random

random.seed(666)
random.shuffle(imgs_list)

3. glob 文件名模式匹配,不用遍历整个目录判断每个文件是不是符合。

import glob
for name in glob.glob('dir/*.png'):
    print (name)

##or
imgs_list = glob.glob(os.path.join(root, sDir)+'/*.png')

4.文件夹不存在就创建 makedirs

#os.makedirs会递归的建立输入的路径,即使是上层的路径不存在,它也会建立这个路径,而os.mkdir父级路径不存在,那么就会报错
def makedir(new_dir):
    if not os.path.exists(new_dir):
        os.makedirs(new_dir)

5.os.path.split()与os.path.splitext()

os.path.split()返回文件的路径和文件名
os.path.splitext()将文件名和扩展名分开

fname,fename=os.path.split("/media/data_2/Data/cat.png")
#fname = “/media/data_2/Data”
#fename=“cat.png”

fname,fename=os.path.splitext("("/media/data_2/Data/cat.png")")
#fname = “/media/data_2/Data/cat”
#fename=“.png”
for root, dirs, files in os.walk(dataset_dir):
        for sDir in dirs:
            imgs_list = glob.glob(os.path.join(root, sDir)+'/*.png')
            random.seed(666)
            random.shuffle(imgs_list)
            imgs_num = len(imgs_list)

            train_point = int(imgs_num * train_per)
            valid_point = int(imgs_num * (train_per + valid_per))

            for i in range(imgs_num):
                if i < train_point:
                    out_dir = train_dir + sDir + '/'
                elif i < valid_point:
                    out_dir = valid_dir + sDir + '/'
                else:
                    out_dir = test_dir + sDir + '/'

                makedir(out_dir)
                out_path = out_dir + os.path.split(imgs_list[i])[-1]
                shutil.copy(imgs_list[i], out_path)

6.创建图像

B_img = np.zeros(mask.shape, np.uint8)
img = np.zeros(img.shape[0:2], dtype='uint8')

7. 掩膜mask cv2.merge cv2.addWeighted R_img[mask == i] = r

img 是原图
mask 是原图上面对于的字条掩膜,每个字条像素是1,2,3累加计数的,其他区域像素为0

for i in range(bboxes.shape[0]):
        cv2.drawContours(gt_text, [bboxes[i]], -1, i + 1, -1)

这样得到mask的
下面函数是要把原图上面显示掩膜。
用到了 R_img[mask == i] ; mask==i表示mask中像素值为i的坐标,加上 R_img[mask == i]表示R_img中相应的位置

def draw_mask(mask, img):
    import random
    # mask = cv2.imread(mask_dir + item)
    # b, g, r = cv2.split(mask)
    if type(mask) == type(None):
        return mask
    #if mask.shape[2] > 1:
    #   mask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
    R_img, G_img, B_img = np.zeros(mask.shape, np.uint8), np.zeros(mask.shape, np.uint8), np.zeros(mask.shape, np.uint8)
    label_num = np.max(mask) + 1
    # print(label_num)
    for i in range(1, label_num):
        r = random.random()*255
        g = random.random()*255
        b = random.random()*255
        R_img[mask == i] = r
        G_img[mask == i] = g
        B_img[mask == i] = b

    check = cv2.merge([R_img, G_img, B_img])
    dst=cv2.addWeighted(img,0.7,check,0.3,0)  
    return dst

8.读写文本

一个文件夹下面的文本,img_1.txt,...,img_10000.txt,每个文本里面的内容格式都是像下面的,需要把###换成LOVE

48,323,798,320,795,370,48,375,###
43,42,890,30,890,90,44,102,###
503,207,899,203,900,265,503,269,###
46,209,349,209,349,268,46,268,###
38,272,454,272,454,319,38,319,###
713,516,839,516,839,573,713,573,###
import os
root = "/media/data_1/2019_project_test/PSENet/data/ICDAR2015/Challenge4/ch4_training_localization_transcription_gt/"
save_path = "/media/data_1/2019_project_test/PSENet/data/ICDAR2015/Challenge4/save/"
file_list = os.listdir(root)
cnt = 0
for file_name in file_list:
    path_file = root + file_name
    cnt += 1
    print("cnt=%d,name=%s"%(cnt,file_name))
    with open(save_path + file_name,'w') as fw:
        with open(path_file, 'r') as fread:
            for line in fread.readlines():
                line = line.replace("###","LOVE")
                fw.write(line)

总结:以后读文本就用这个:

      with open(path_file, 'r') as fread:
            for line in fread.readlines():  
                line = line.strip() 
                ...

9.python list 自定义排序例子

eg1:

In [53]: L = [('b',6),('a',1),('c',3),('d',4)] 
In [54]: L.sort(key=lambda x:x[1])
In [56]: L
 Out[56]: [('a', 1), ('c', 3), ('d', 4), ('b', 6)]

eg2:班级学生的成绩信息集合:字段包括学号,姓名,语文成绩,数学成绩

item=[[101,'张三',80,75],[102,'李四',80,85],[103,'王五',63,90],[104,'小明',95,75],[105,'小红',75,65]]

这就是一种列表中嵌套列表的方法,假如我们要对语文成绩进行排序:

item=[[101,'张三',80,75],[102,'李四',80,85],[103,'王五',63,90],[104,'小明',95,75],[105,'小红',75,65]] 
item.sort(key=lambda x:x[2], reverse=True)
 print(item)
#[[104, '小明', 95, 75], [101, '张三', 80, 75], [102, '李四', 80, 85], [105, '小红', 75, 65], [103, '王五', 63, 90]]

如果语文成绩相同则按数学成绩的高低排序:

item=[[101,'张三',80,75],[102,'李四',80,85],[103,'王五',63,90],[104,'小明',95,75],[105,'小红',75,65]] 
item.sort(key=lambda x:(x[2],x[3]), reverse=True)
print(item)
#可以看到张三和李四的位置互换了 
#[[104, '小明', 95, 75], [102, '李四', 80, 85], [101, '张三', 80, 75], [105, '小红', 75, 65], [103, '王五', 63, 90]]

那如果语文成绩和数学成绩都相同,则按学号升序排:
就可以这样做(在学号字段前面加个‘-’号):

item=[[101,'张三',80,75],[102,'李四',80,85],[103,'王五',63,90],[104,'小明',95,75],[105,'小红',75,65]] 
item.sort(key=lambda x:(x[2],x[3],-x[0]), reverse=True)
print(item)
#[[104, '小明', 95, 75], [102, '李四', 80, 85], [101, '张三', 80, 75], [105, '小红', 75, 65], [103, '王五', 63, 90]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值