【python】将json内解码失败的中文修改为英文(‘utf-8‘ codec can‘t decode,labelme标注时文件名未中文)

news2024/11/27 13:52:30

出现问题的场景:

语义分割数据集,使用labelme工具进行标注,然后标注图片存在中文名,导致json标签文件写入中文图片名,从而解析失败。
在这里插入图片描述
在这里插入图片描述
代码解析json文件时,出现报错:
在这里插入图片描述

python脚本需求:

  1. 将文件名和标签json文件改名为英文;
  2. 将json文件内的"imagePath"修改为英文;
# -*- coding: utf-8 -*-
# @Time : 2023/9/13 11:04
# @Author : CLW
# @FileName: rename_and_reset_json.py
# @Software: PyCharm


'''
算法功能:
指遍历定目录下,将指定格式(main_types)的文件改名,还可以将同名的指定类型(sub_types)的文件一同改名
然后将json文件内的imagePath修改为新文件名

应用场景:
1. labelme标注后,名称含有中文,需要把图片和json一同改为英文
···

'''


import os
import json
'''
####################    输入参数设置(开始)    #################### 
'''
root_dir = r'D:\dataset\乌海君正\液位计zt_ywj_1x\zt_ywj_1x-乌海君正化工'
main_types = ['jpg']
sub_types = ['json']     # 附属格式文件,如果与主要格式文件同名,则可以一同改吗,不需要则为空
rename_front = 'WHJZHG_ywj1x_'  # 改名的前缀
count = 1   # 改名所用的计数
'''
####################    输入参数设置(结束)    #################### 
'''

def Edit_label(jsonfile, new_name):
    # Candidate encodings to try
    encodings = ['utf-8-sig', 'utf-8', 'latin-1']  # Add more if necessary
    print("jsonfile=", jsonfile)

    # Try different encodings until successful
    for encoding in encodings:
        try:
            with open(jsonfile, 'rb') as jf:
                content = jf.read().decode(encoding)
                info = json.loads(content)
                print("encoding=", encoding)
                # Modify the content as needed
                info["imagePath"] = new_name

            with open(jsonfile, 'w', encoding='utf-8') as fw:
                # Write the modified content back to the file using UTF-8 encoding
                json.dump(info, fw, ensure_ascii=False)
            break  # Break the loop if successful
        except UnicodeDecodeError:
            continue  # Try the next encoding if decoding fails

    # Handle case when no encoding works
    else:
        print("Unable to decode JSON file using any of the specified encodings.")




for root, dir, files in os.walk(root_dir):
    for file in files:
        if file.split('.')[-1] in main_types:
            # 主体文件改名
            new_main_filename = rename_front + '_' + str(count) + '.' + file.split('.')[-1]
            print(os.path.join(root, new_main_filename))
            os.rename(os.path.join(root, file), os.path.join(root, new_main_filename))
            # 改json文件
            json_name = file[:-len(file.split('.')[-1])] + 'json'
            new_json_name = new_main_filename[:-len(new_main_filename.split('.')[-1])] + 'json'
            if os.path.exists(os.path.join(root, json_name)):
                Edit_label(os.path.join(root, json_name), new_json_name)
            # 修改附属文件
            for sub_t in sub_types:
                sub_filename = file[:-len(file.split('.')[-1])] + sub_t
                # 如果存在附属文件则修改
                if os.path.exists(os.path.join(root, sub_filename)):
                    new_sub_filename = new_main_filename[:-len(new_main_filename.split('.')[-1])] + sub_t
                    print(os.path.join(root, new_sub_filename))
                    os.rename(os.path.join(root, sub_filename), os.path.join(root, new_sub_filename))
            count += 1


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1659548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 7大排序

🐵本篇文章将对数据结构中7大排序的知识进行讲解 一、插入排序 有一组待排序的数据array,以升序为例,从第二个数据开始(用tmp表示)依次遍历整组数据,每遍历到一个数据都再从tmp的前一个数据开始&#xff0…

论文解读--High-resolution Automotive Radar Point Cloud Imaging and Processing

高分辨汽车雷达点云成像和处理 摘要 汽车雷达具有体积小、硬件成本低、全天候工作、高分辨率等公认的优点,是高级驾驶辅助系统(ADAS)必不可少的一类重要传感器。然而,低角度分辨率和低成像性能的限制很难满足下一阶段ADAS的需要。新兴的4D成像雷达采用多…

【随笔】Git 高级篇 -- 不带 source 参数的命令 git fetch git push(三十九)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

【工具】如何提取一个mp4文件的关键帧

文章目录 怎么做如何安装ffmepgUbuntu 或 DebianCentOS 或 FedoramacOSWindows其他 Linux 发行版 实践什么是关键帧 怎么做 你可以使用ffmpeg这个强大的多媒体处理工具来提取mp4文件中的关键帧。以下是一个示例命令,可以使用ffmpeg从mp4文件中提取关键帧&#xff1…

一款免费的PDF转换工具分享

最近在吾爱上发现一款PDF免费转换工具,支持多种格式转换,试了一下,还不错 最重要的是免费,不用开会员转换,也没有限制(文末有工具地址) ps:转换完成后看一下是否符合,可能会有些许…

哇哦,一个超级牛逼的图片格式!!使用它之后我们系统加载图片快了一倍!!! 图片格式转换webp学习!

什么是webp格式? WebP 格式是一种图像文件格式。 它是由谷歌开发的,旨在提供一种高效的图像压缩方式,同时保持较好的图像质量。WebP 格式具有较小的文件体积,能够在一定程度上减少网络传输的数据量,提升网页加载速度…

网工常用工具——Xshell

今天给各位介绍一下,Xshell工具 Xshell是一款功能强大的终端模拟器,主要用于Windows操作系统,用于远程访问和管理服务器,允许用户通过SSH(Secure Shell)协议安全地连接到远程Linux/Unix服务器或其他支持SS…

DenseCLIP论文讲解

文章目录 简介方法总体框架 (Language-Guided Dense Prediction)上下文感知提示 (Context-Aware Prompting)应用实例 论文:DenseCLIP: Language-Guided Dense Prediction with Context-Aware Prompting 代码&#xff1…

Spring与AI结合-spring boot3整合AI组件

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 目录 写在前面 spring ai简介 单独整合al接口 整合Spring AI组件 起步条件 ​编辑 进行必要配置 写在最后 写在前面 本文介绍了springboot开发后端服务中,AI组件(Spring A…

淘宝扭蛋机小程序:开启惊喜购物的新纪元

一、引言 随着科技的飞速发展,我们的购物方式也在不断地更新换代。淘宝,作为国内领先的电商平台,始终致力于为用户提供更加便捷、有趣的购物体验。为了满足广大用户对于新鲜、刺激购物体验的追求,淘宝特别推出了扭蛋机小程序&…

[C++] const 成员函数

标题:[C] this指针 & const 成员函数 水墨不写bug 正文开始: 目录 (一)Cpp的面向对象编程 (二)this指针 (三)const修饰的成员函数 在正式讲解const修饰成员函数之前&#x…

实测ChatGPT插件真香用法!视频一键变脑图,高数作业轻松拿捏

Sam Altman诚不我欺: ChatGPT插件和联网功能终于在这两天向尊贵的Plus用户全面开放了。 像之前预告的一样,联网可以直接获取2021年9月之后的消息,插件也安排了70多个,购物订餐订机票等日常功能应有尽有,更专业的数学、…

网站未部署证书有何影响,如何解决?

如果您的网站没有ssl证书会有以下风险 1 浏览器标记为不安全 未安装证书的网站在访问时会有不安全的提示弹窗或者在网址栏直接显示不安全 2 影响企业信誉 当用户访问网站时看到不安全提示,会对网站的真实性和安全性产生怀疑,不敢轻易与该企业合作&…

Python-VBA函数之旅-setattr函数

目录 一、setattr函数的常见应用场景 二、setattr函数使用注意事项 三、如何用好setattr函数? 1、setattr函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://blog.csdn.net/ygb_1024?…

宏的优缺点?C++有哪些技术替代宏?(const)权限的平移、缩小

宏的优缺点? 优点: 1.增强代码的复用性。【减少冗余代码】 2.提高性能,提升代码运行效率。 缺点: 1.不方便调试宏。(因为预编译阶段进行了替换) 2.导致代码可读性差,可维护性差&#xff0…

小阳的戒S笔记

文章目录 写在前面2024年5月8日21:12:172024年5月9日21:48:242024年5月10日08:04:141、记录昨夜之身体变化2、自身制定之计划1.此亦乃要事,特定问了度娘与GPT,找时间还得咨询专业医师。2.通过跑步宣泄,同时锻炼身体3.我不会有压力&#xff0c…

替换spring-boot中的组件版本

spring-boot是一个用于简化开发的框架,引入spring-boot后会自动包含spring框架,通过引入xxx-start来完成指定组件的功能。比如: spring-boot-starter-web(嵌入 Tomcat 和 web 开发需要的 servlet 和 jsp 支持)spring-boot-starter-data-jpa(…

逻辑卷管理-LVM

目录 1. LVM的基本概念 2. Linux下创建和管理LVM 3. 环境准备 4. 物理卷管理 4.1. 创建物理卷 4.2. 显示物理卷 4.3. 删除物理卷 4. 卷组管理 4.1. 创建卷组 4.2. 显示卷组 4.3. 扩展卷组 4.4. 缩减卷组 4.5. 删除卷组 4.6. 分割卷组 4.7 组合卷组 5. 逻辑卷管…

VisualGDB:Linux静态库项目创建、编译及库的使用

接上篇《VisualGDB:Linux动态库项目创建、编译及库的使用》,静态库的创建和使用与动态库基本无差别,唯一需要做的就是指定项目生成静态库。 一、指定项目生成静态库 二、重新构建和编译项目 这里注意,同样要copy一个libxxx.so格式…

InternLM-Chat-7B部署调用-个人记录

一、环境准备 pip install modelscope1.9.5 pip install transformers4.35.2 二、下载模型 import torch from modelscope import snapshot_download, AutoModel, AutoTokenizer import os model_dir snapshot_download(Shanghai_AI_Laboratory/internlm-chat-7b, cache_di…