2021-04-06 常用python语法学习

1、sorted 排序

sorted_data = sorted(data.items(), key=lambda data: int(data[1]['input'][0]['shape'][0]), reverse=True)

lambda函数也叫匿名函数,即,函数没有具体的名称。
冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。
此时用在排序功能上,可以根据data中的输入shape[0]的值从大到小(reverse=True表示降序,默认False表示升序),对data中的元组进行重新排序。

data其中两条
data.item()其中两条
sorted_data结果

2、统计文件夹下.jpg数量

[os.path.join(train_images_path, image_name) 
    for image_name in os.listdir(train_images_path) 
    if image_name.endswith('.jpg')]

os.path.join将路径与文件名合并一起;其中image_name在后面的for语句中遍历,os.listdir显示路径下所有文件名;最后由if语句判断image_name.endswith后缀是否为.jpg

显示结果

使用len()即可统计数量

image_count = len([os.path.join(train_images_path, image_name) 
    for image_name in os.listdir(train_images_path) 
    if image_name.endswith('.jpg')])

3、按照文件名进行排序

image_dir = "images/"
image_type = 'jpg'
files = []
for image_name in os.listdir(image_dir):
    if image_name.endswith('.{}'.format(image_type)) \
            and not image_name.startswith('.'):
        files.append(os.path.join(image_dir, image_name))
x = sorted(files)
print(x)
显示结果

4、将前面85%的图片和标签作为训练集,保存成txt文件

name = 'train'
eval_num = int(image_count * 0.15)
images = images[:-eval_num]
labels = labels[:-eval_num]
with open('./{}.txt'.format(name), 'w') as f:
    for i in range(len(images)):
        f.write('{}\t{}\n'.format(images[i], labels[i]))

[:-eval_num]表示从倒数eval_num位置往前所有;‘{}’.format(x)表示{}为x的格式化表示;\t表示tab跳格;\n表示回车换行;images和labels均为按照文件名排序后得到的结果。

train.txt

5、读入文件内容,将每行的内容分割,并跳过\t

with open('./train.txt', 'r') as f:
    for line in f.readlines():
        print(line.strip().split('\t'))
显示结果

6、断言判断语句assert,如果正确无输出结果,错误则报告错误结果

mode = 'train1'
assert mode in ['train', 'test', 'predict'], \
            "mode should be 'train' or 'test' or 'predict', but got {}".format(mode)
显示结果

推荐阅读更多精彩内容