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

出现问题的场景:

语义分割数据集,使用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 tryencodings = ['utf-8-sig', 'utf-8', 'latin-1']  # Add more if necessaryprint("jsonfile=", jsonfile)# Try different encodings until successfulfor 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 neededinfo["imagePath"] = new_namewith open(jsonfile, 'w', encoding='utf-8') as fw:# Write the modified content back to the file using UTF-8 encodingjson.dump(info, fw, ensure_ascii=False)break  # Break the loop if successfulexcept UnicodeDecodeError:continue  # Try the next encoding if decoding fails# Handle case when no encoding workselse: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_tprint(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://xiahunao.cn/news/3030920.html

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

相关文章

汽车EDI:安通林Antolin EDI 项目案例

安通林(Antolin)是一家全球性的汽车零部件制造商,专注于汽车内饰系统和零部件的生产,致力于创新和采用先进的技术。近年来 安通林Antolin 推动其供应商部署EDI系统,使得双方能够通过EDI传输业务单据,极大提…

【oj题】环形链表

目录 一. OJ链接: 环形链表 【思路】 快慢指针 ​编辑【扩展问题】 为什么快指针每次走两步,慢指针走一步可以解决问题? ​编辑【扩展问题】快指针一次走3步,走4步,...n步行吗? 二. OJ链接&#xff1a…

带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败了

问题: 我已经成功地使用以下 sed 命令在Linux中搜索/替换文本: sed -i s/old_string/new_string/g /path/to/file然而,当我在Mac OS X上尝试时,我得到: command i expects \ followed by text我以为我的Mac运行的是…

Liunx_DNS域名解析服务

目录 DNS术语 域名分层 顶级域名(Top-Level Domain, TLD) 二级域名(Second-Level Domain, SLD) 子域名(Subdomain) FQDN(Fully Qualified Domain Name) 域名分层的意义 域名…

【研发日记】Matlab/Simulink避坑指南(十二)——Initialize Function执行Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结归纳 前言 见《研发日记,Matlab/Simulink避坑指南(七)——数据溢出钳位Bug》 见《研发日记,Matlab/Simulink避坑指南(八)——else if分支结构Bug》 见《研发日记,Matlab/Simuli…

如何在 Mac 上恢复已删除的文件

点击“删除”后立即后悔?不用担心。我们的教程介绍了如何恢复已删除的 Mac 文件、电子邮件、iTunes 音乐等,即使您没有 Time Machine 备份并且无需支付软件费用。 在 macOS 中丢失文件可能会非常痛苦,如果您是点击删除的人,情况会…

14 华三 Telent

AI 解读 09 华三 SSH-CSDN博客 华三 Telent是华为三号电信工程有限公司的简称,是一家专门从事电信网络工程建设的公司。该公司提供电信网络规划、设计、建设、维护等一系列服务,包括有线和无线网络设备的安装和调试、网络性能优化等。华三 Telent致力于…

word转pdf的java实现(documents4j)

一、多余的话 java实现word转pdf可用的jar包不多,很多都是收费的。最近发现com.documents4j挺好用的,它支持在本机转换,也支持远程服务转换。但它依赖于微软的office。电脑需要安装office才能转换。鉴于没在linux中使用office,本…

浅谈如何自我实现一个消息队列服务器(7)——编写服务器部分

文章目录 一、编写服务器代码1.1、分析一个服务器应具备的功能1.1.1、成员变量1.1.2、对外提供的接口 一、编写服务器代码 再次拿出这张图,前面我们已经将重要概念:VirtualHost、exchange、msgQueue、message、binding 都实现了,此时就可以开…

灯珠CCD或CMOS成像RGB数据 光谱重建

1. 源由 本文主要为了通过摄像头CCD或者CMOS传感器对灯珠成像数据分析、重建灯珠可见光范围光谱数据的研究,从原理和方法上论证可行性。 随着照明技术迅猛发展,LED技术日渐成熟。LED产品由于具备经久耐用、节能且价格低等优势,已成为照明行…

python中的数据可视化:二维直方图 hist2d()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 python中的数据可视化: 二维直方图 hist2d() 选择题 关于以下代码输出结果的说法中正确的是? import matplotlib.pyplot as plt import numpy as np x np.random.normal(0, 1, …

如何打开远程桌面连接?

远程桌面连接是一项强大的功能,它允许我们远程访问其他计算机,并在远程计算机上进行操作。这对于远程办公、技术支持和远程培训等场景非常有用。本文将介绍如何在不同操作系统中打开远程桌面连接。 Windows系统 在Windows操作系统中,打开远程…

【动态规划】子数组、子串系列II|等差数列划分|最长湍流子数组|单词拆分|环绕字符串中唯一的子字符串

一、等差数列划分 413. 等差数列划分 算法原理 💡细节: 1.如果当前nums数组中i位置的数和前面两个数可以构成等差数列,那么当前位置所有子数组构成的等差数列个数dp[i]就等于前一个位置有子数组构成的等差数列个数1(这个1代表增加…

【Qt 学习笔记】Qt常用控件 | 多元素控件 | Table Widget的说明及介绍

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 多元素控件 | Table Widget的说明及介绍 文章编号&#…

Java面试——MyBatis

优质博文:IT-BLOG-CN 一、MyBatis 与 JDBC 的区别 【1】JDBC 是 Java 提供操作数据库的 API;MyBatis 是一个持久层 ORM 框架,底层是对 JDBC 的封装。 【2】使用 JDBC 需要连接数据库,注册驱动和数据库信息工作量大,每…

【C++】CentOS环境搭建-快速升级G++版本

【C】CentOS环境搭建-快速升级G版本 1. 安装CentOS的软件集仓库:2. 安装你想要的devtoolset版本,例如devtoolset-9:3. 启用新版本的编译器:4. 检查G版本: 在CentOS系统中升级G编译器通常涉及使用devtoolset或者SCL&…

为什么要学Python?学Python有什么用?

为什么要学Python?学Python有什么用? 在当今的数字化时代,编程已成为一项宝贵的技能。Python,作为一种流行的编程语言,因其易于学习和强大的功能而受到全球开发者的青睐。本文将探讨学习Python的原因和它的实际应用&am…

【组合博弈】介绍

本文为学习笔记,详细内容参考"Lessons in Play,Michael H. Albert Richard J. Nowakowski David Wolfe" 文章目录 组合博弈介绍(Combinatorial Games)DOMINEERING游戏组合游戏选手介绍Options博弈树(game tree) 组合博弈介绍(Combi…

基于SSM框架多人命题系统

采用技术 基于SSM框架多人命题系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 学生端 登录 个人中心 公告信息 试题信息 管理员 登录 个人信息…

苹果M4芯片:推动AI时代的革新力量

随着科技的飞速发展,苹果公司一直以其创新精神引领着行业潮流。其中,M4芯片的推出无疑是苹果在人工智能领域迈出的重要一步。这款专为机器学习和AI计算而设计的芯片,不仅在新款iPad Pro等消费电子产品上亮相,更是预示着苹果即将开…