字符串包含了不需要的双引号,导致读取成json文件失败?Python怎么批量修改?

news/2024/9/18 9:01:10/文章来源:https://www.cnblogs.com/dcpeng/p/18377696

大家好,我是Python进阶者。

一、前言

前几天在Python最强王者交流群【哎呦喂  是豆子~】问了一个Python数据处理的问题。问题如下:

大佬们 请教下这个问题,数据为下载的html文件,写法已经固定,解析成json文件会报错,这种字符串包含了不需要的双引号,导致读取成json文件失败?怎么批量修改?用正则会把其他数据也给替换掉,出现双引号的位置内容不确定

测试数据:{ "taskType": 1, "printPageHeight": 1459, "exportTypeTemplate": "html", "reportTitle": "信息科技"网络安全漏洞扫描系统 "安全评估报告-主机报表", "companyName": "信息科技", "createTime": "2024-08-09 10:03:48", "curr_lang": "zh-CN"pt "漏洞" }

怎么批量修改成可读取的json文件?

image.png

二、实现过程

这里【猫药师Kelly】给了一个指导,如下所示:最后一个字段curr_lang意思是用到的语言,那么pt "漏洞"就是无效信息。看看是不是其它数据都符合这个规律,是的话把无效信息清洗掉。

【哎呦喂  是豆子~】:那个是我改的   造的测试数据。

后来【此类生物】给了一份代码:

import re
import json# 原始的JSON字符串
json_str = '''{
 "taskType": 1,
 "printPageHeight": 1459,
 "exportTypeTemplate": "html",
 "reportTitle": "信息科技"网络安全漏洞扫描系统 "安全评估报告-主机报表",
 "companyName": "信息科技",
 "createTime": "2024-08-09 10:03:48",
 "curr_lang": "zh-CN"pt "漏洞"
}'''# 修复多余的逗号
json_str = re.sub(r',\s*[^,}]*/pre>, '', json_str)# 修复属性值,确保每个属性值都被双引号包围
# 这个正则表达式会匹配到属性名和属性值,然后尝试修复属性值
json_str = re.sub(r'("([^"]+)"\s*:\s*)([^"]+)(,?)', r'\1"\4"\5', json_str)# 尝试将修复后的字符串解析为JSON
try:
    data = json.loads(json_str)
    print("JSON解析成功:", data)
except json.JSONDecodeError as e:
    print("JSON解析失败:", e)

【哎呦喂  是豆子~】:不行  error: invalid group reference 5 at position 7。测试数据

要把这个数据解析成json文件,正常都是可以读取的,但是部分数据为了展示好看,研发把部分数据又加了引号,导致读取成json文件的时候报错,有没有什么办法可以避开这种问题,成功读取成json格式

【瑜亮老师】:下面这个代码:

json_str = re.findall(r'"(.*?)": (.*?)[,\n]', json_str)
data = {i[0]: i[1].replace('"', ' ') for i in json_str}

这样出来就字典。就是先匹配数据中冒号两端的数据,然后替换删除右侧字符串中的双引号。

想转换成json字符串,就加一行json_str = json.dumps(data, ensure_ascii=False)

【哎呦喂  是豆子~】:还得是大佬!!!瑜亮老师的办法简直了!!!显得我更我菜了  不知道变通  难怪有ai也救不了我

【黑科技·鼓包】:向老师学习!太强了!

后来【此类生物】也给了一份代码:他补充道:或许需求不是这样,没细看。

image.png

【瑜亮老师】:我那个也只是给出一个思路。你这个可以进一步修改,保持原数据中整型不变。data = {i[0]: i[1][1:-1] if i[1][0] == '"' else int(i[1]) for i in json_str}

后来粉丝的数据又有新增,如下:

image.png

后来【瑜亮老师】也顺利地解决了粉丝的提问。

image.png

顺利地解决了自己的问题。

如果你也有类似这种Python相关的小问题,欢迎随时来交流群学习交流哦,有问必答!

三、总结

大家好,我是Python进阶者。这篇文章主要盘点了一个Python数据处理的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【哎呦喂  是豆子~】提出的问题,感谢【瑜亮老师】、【猫药师Kelly】、【冯诚】、【黑科技·鼓包】、【此类生物】给出的思路,感谢【莫生气】等人参与学习交流。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

image.png

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速排序时间复杂度

首先上结论:快速排序算法的时间复杂度是O(nlogn)。

IDEA更换背景图片

DEA如何更换背景图片 在IDEA编辑器中点击【Help】–》【Find Action…】快捷键为【CTRL+SHILF+A】。在打开的窗口内搜索【Set Background Image】并点击找到的选项。 选择浏览一张要更改成背景的图片,这里可以对背景的透明度,样式进行修改。修改完后点击【OK】按钮。 本文来…

【python教程】打包和发布自己的项目,让别人去pip

@目录1.环境搭建1.1 换源1.2 安装wheel1.3 安装twine1.4 注册PyPI账号2.编写setup.py2.1 项目文件树2.2 编写setup.py文件3.构建4.上传ERROR:The user XXX isnt allowed to upload to project 2024.1.19更新:1.环境搭建 1.1 换源在pip安装时使用-i参数,可以指定源。以下有许…

Go 互斥锁 Mutex 源码分析(二)

原创文章,欢迎转载,转载请注明出处,谢谢。0. 前言 在 Go 互斥锁 Mutex 源码分析(一) 一文中分析了互斥锁的结构和基本的抢占互斥锁的场景。在学习锁的过程中,看的不少文章是基于锁的状态解释的,个人经验来看,从锁的状态出发容易陷入细节,了解锁的状态转换过一段时间就忘…

REST framework:分页

REST framework提供了分页的支持 一、全局配置(不建议使用) 在配置文件中设置全局的分页方式:REST_FRAMEWORK = {DEFAULT_PAGINATION_CLASS: rest_framework.pagination.PageNumberPagination,PAGE_SIZE: 10 # 每页数据量 }二、局部配置 在不同的视图中可以通过pagination_c…

052、Vue3+TypeScript基础,页面通讯之一个组件中多个v-model数据绑定

01、main.js代码如下:// 引入createApp用于创建Vue实例 import {createApp} from vue // 引入App.vue根组件 import App from ./App.vue// 引入emitter用于全局事件总线 // import emitter from @/utils/emitterconst app = createApp(App);// App.vue的根元素id为app app.mou…

React 和 Vite 环境下 TailwindCSS 的配置指南

1. 安装tailwindcss npm install -D tailwindcss postcss autoprefixer2. 生成tailwindcss 配置文件 npx tailwind init -p3. tailwind.config.js 配置 /** @type {import(tailwindcss).Config} */ export default {content: ["./index.html","./src/**/*.{js,t…

051、Vue3+TypeScript基础,页面通讯之v-model在组件中手写实现

01、main.js代码如下:// 引入createApp用于创建Vue实例 import {createApp} from vue // 引入App.vue根组件 import App from ./App.vue// 引入emitter用于全局事件总线 // import emitter from @/utils/emitterconst app = createApp(App);// App.vue的根元素id为app app.mou…

docker 修改容器内容后更新镜像的流程

在 Docker 中,如果你修改了一个容器的内容并希望将这些更改保存为一个新的镜像,可以按照以下步骤进行: docker version: 26.1 1. 确保容器运行 首先,确保你正在修改的容器是运行中的。如果容器已经停止,你需要启动它: docker start <container_id> 2. 进入容器并进…

REST framework:排序过滤器的使用

对于列表数据,REST framework提供了OrderingFilter过滤器来帮助我们快速指明数据按照指定字段进行排序 1、在setting中的REST_FRAMEWORK添加配置DEFAULT_FILTER_BACKENDS: (# 这个是指定使用django_filters中的过滤器来进行过滤django_filters.rest_framework.DjangoFilterBac…

AP5160 电压2.5-100V 电流12A PWM 调光 大功率LED驱动 手电筒与摩托车照明方案

产品描述 AP5160 是一款效率高,稳定可靠的 LED 灯恒流驱动控制芯片,内置高精度比较器,固定 关断时间控制电路,恒流驱动电路等,特别适合大功率 LED 恒流驱动。 AP5160采用SOT23-6封装,通过调节外置电流检测的电阻值来设置流过LED 灯的电流,从而设置LED灯的亮度,外驱 MOS…

解决方案 | VS2022 社区版 获取工具和功能找不到visual stdio安装程序的终极解决办法

首先这是一种解决方法: https://blog.csdn.net/Wysnbb/article/details/124588395其次,如果上面方法解决不了,那么可以重新下载vs 社区版。(不要误会,并不是下载10G+的东西) https://visualstudio.microsoft.com/zh-hans/vs/community/下载得到:安装VisualStudioSetup.e…