Esempio n. 1
0
def extract_files(src, dst, pattern, if_exists='replace'):
    """ 提取满足pattern模式的文件
    """
    d1, d2 = Dir(src), Dir(dst)
    files = d1.select(pattern).subs
    for f in files:
        p1, p2 = File(d1 / f), File(d2 / f)
        p1.copy(p2, if_exists=if_exists)
Esempio n. 2
0
def modify_file(file, func, *, outfile=None, file_mode=None, debug=0):
    """ 对单个文件就行优化的功能函数

    这样一些底层函数功能可以写成数据级的接口,然后由这个函数负责文件的读写操作,并且支持debug比较前后内容差异

    :param outfile: 默认是对file原地操作,如果使用该参数,则将处理后的内容写入outfile文件
    :param file_mode: 指定文件读取类型格式,例如'.json'是json文件,读取为字典
    :param debug: 这个功能可以对照refine分级轮理解
        无outfile参数时,原地操作
            0,【直接原地操作】关闭调试,直接运行 (根据outfile=None选择原地操作,或者指定生成新文件)
            1,【进行审核】打开BC比较差异,左边原始内容,右边参考内容  (打开前后差异内容对比)
            -1,【先斩后奏】介于完全不调试和全部人工检查之间,特殊的差异比较。左边放原始文件修改后的结果,右边对照原内容。
        有outfile参数时
            0 | False,直接生成目标文件,如果outfile已存在会被覆盖
            1 | True,直接生成目标文件,但是会弹出bc比较前后内容差异 (相同内容不会弹出)
    """
    infile = File(file)
    enc = get_encoding(infile.read(mode='b'))
    data = infile.read(mode=file_mode, encoding=enc)
    origin_content = str(data)
    new_data = func(data)

    isdiff = origin_content != str(new_data)
    if outfile is None:  # 原地操作
        if isdiff:  # 内容不同才会有相关debug功能,否则静默跳过就好
            if debug == 0:
                infile.write(new_data, mode=file_mode)  # 直接处理
            elif debug == 1:
                temp_file = File('refine_content',
                                 Dir.TEMP,
                                 suffix=infile.suffix).write(new_data)
                bcompare(infile, temp_file)  # 使用beyond compare软件打开对比查看
            elif debug == -1:
                temp_file = File('origin_content',
                                 Dir.TEMP,
                                 suffix=infile.suffix)
                infile.copy(temp_file)
                infile.write(new_data, mode=file_mode,
                             encoding=enc)  # 把原文件内容替换了
                bcompare(infile, temp_file)  # 然后显示与旧内容进行对比
            else:
                raise ValueError(f'{debug}')
    else:
        outfile = File(outfile)
        outfile.write(new_data, mode=file_mode, encoding=enc)  # 直接处理
        if debug and isdiff:
            bcompare(infile, outfile)

    return isdiff
Esempio n. 3
0
        def func(g):
            # 1 获得图片id和文件
            image_id, df = g
            imfile = File(df.iloc[0]['file_name'], imdir)
            if not imfile:
                return  # 如果没有图片不处理
            image = self.images.loc[image_id]
            image = image.drop(['file_name', 'height', 'width'])

            # 2 生成这张图片对应的json标注
            if dst_dir:
                imfile = imfile.copy(dst_dir, if_exists='skip')
            lm = Coco2Labelme(imfile)

            height, width = lm.data['imageHeight'], lm.data['imageWidth']
            # 注意df取出来的image_id默认是int64类型,要转成int,否则json会保存不了int64类型
            lm.add_shape('', [0, 0, 10, 0],
                         shape_type='line',
                         shape_color=[0, 0, 0],
                         size=f'{height}x{width}',
                         **(image.to_dict()))
            getattr(lm, match_func_name)(df,
                                         segmentation=segmentation,
                                         hide_match_dt=hide_match_dt,
                                         **kwargs)
            lm.write()  # 保存json文件到img对应目录下
Esempio n. 4
0
        def func(g):
            # 1 获得图片id和文件
            image_id, df = g
            imfile = File(df.iloc[0]['file_name'], imdir)
            if not imfile:
                return  # 如果没有图片不处理

            # 2 生成这张图片对应的json标注
            if dst_dir:
                imfile = imfile.copy(dst_dir, if_exists='skip')
            lm = Coco2Labelme(imfile)
            height, width = lm.img.size(
            )  # 也可以用image['height'], image['width']获取
            # 注意df取出来的image_id默认是int64类型,要转成int,否则json会保存不了int64类型
            lm.add_shape('', [0, 0, 10, 0],
                         shape_type='line',
                         shape_color=[0, 0, 0],
                         n_gt_box=len(df),
                         image_id=int(image_id),
                         size=f'{height}x{width}')
            lm.anns_gt(df, segmentation=segmentation)
            lm.write()  # 保存json文件到img对应目录下