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)
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
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对应目录下
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对应目录下