Python-对象与json互转-json读写-文件读写

文章目录

    • 1.json
    • 2.类对象序列化
    • 3.调用exe进行数据交换
    • 4.总结

1.json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

2.类对象序列化

# 写文件
def _WriteFile(filename, strData):data = strData.encode('UTF-8');# 打开一个文件fw = open(filename, "wb");fw.write(data);# 关闭打开的文件fw.close();# 读文件
def _ReadFile(filename):# 读取数据data = None;with open(filename, 'rb') as fr:data = fr.read();# 编码转换try:strData = str(data, 'utf-8');return strData;except:try:strData = str(data, 'GBK');return strData;except Exception as e:try:strData = str(data, 'latin1');return strData;except Exception as e:print(filename);pass;pass;return None;class AppPara:def __init__(self):self.svg_show_url = "";  # svg显示的二维码网址self.svg_show_local_full_filename = "";  # svg结果服务器保存路径self.svg_download_result_full_filename = "";  # 压缩包结果保存路径self.svg_upload_para_full_filename = "";  # 程序初始化压缩包路径self.svg_color_table_full_filename = "";  # 色表文件路径def DumpFile(self, filename):# 类对象转为json字符串data = json.dumps(self, default=lambda obj: obj.__dict__, ensure_ascii=False);# 写入文件_WriteFile(filename, data);def LoadFile(self, filename):# 读取文件数据data = _ReadFile(filename);if data is None:return False;# 字典对象转数据objDict = json.loads(data);self.__dict__.update(objDict);

3.调用exe进行数据交换

import json
import os
import subprocess
import shutil
import uuid
from loguru import logger# 写文件
from SvgProcess.ACodeTimer import CodeTimerdef _WriteFile(filename, strData):data = strData.encode('UTF-8');# 打开一个文件fw = open(filename, "wb");fw.write(data);# 关闭打开的文件fw.close();# 读文件
def _ReadFile(filename):# 读取数据data = None;with open(filename, 'rb') as fr:data = fr.read();# 编码转换try:strData = str(data, 'utf-8');return strData;except Exception as e:try:strData = str(data, 'GBK');return strData;except Exception as e:try:strData = str(data, 'latin1');return strData;except Exception as e:logger.error("PolygonMultiCenter _ReadFile:" + str(e));print(filename);return None;# 将文件序列化为json字符串
def ToJson(tmpParaFilename, pathList, colorAreaDictNum, textPtWidthHeightMMInfoFilename, resultJsonFilename):# 抽取路径对象pathJsonObjList = [];for pathObj in pathList:pathJsonObj = {"Index": pathObj.m_Index,"PointsMM": pathObj.m_pointsMM,"ColorTableIndexText": pathObj.m_ColorTableIndexText};pathJsonObjList.append(pathJsonObj);# 构建json对象jsonObj = {"colorAreaDictNum": str(colorAreaDictNum),"textPtWidthHeightMMInfoFilename": textPtWidthHeightMMInfoFilename,"pathJsonObjList": pathJsonObjList,"resultJsonFilename": resultJsonFilename};# 类对象转为json字符串data = json.dumps(jsonObj);# 写入文件_WriteFile(tmpParaFilename, data);pass;def ComputeExe(svgfilename, pathList, colorAreaDictNum):# 构建json文件和字体信息文件rootPath = os.path.dirname(__file__);loc_json_fmt = r"{}/tmp/" + str(uuid.uuid1()).replace("-", "") + ".json";  # 参数文件loc_json_filename = loc_json_fmt.format(rootPath);loc_json_filename = loc_json_filename.replace("\\", "/");loc_textPtWH_fmt = r"{}/TextPtWidthHeightMMInfo.json";  # 文本宽高信息loc_textPtWH_filename = loc_textPtWH_fmt.format(rootPath);loc_textPtWH_filename = loc_textPtWH_filename.replace("\\", "/");result_json_fmt = r"{}/tmp/" + str(uuid.uuid1()).replace("-", "") + "-PMC.json";  # 标注结果result_json_filename = result_json_fmt.format(rootPath);result_json_filename = result_json_filename.replace("\\", "/");# 生成参数文件ToJson(loc_json_filename, pathList, colorAreaDictNum, loc_textPtWH_filename, result_json_filename);_Timer = CodeTimer("计算时间");exe_fmt = r"{}/PolygonMultiCenter/PolygonMultiCenter.exe";  # 可执行文件exe_filename = exe_fmt.format(rootPath);exe_filename = exe_filename.replace("\\", "/");# 调用第三方程序实现多点标注_command_str = "\"" + exe_filename + "\"" + " \"" + loc_json_filename + "\""  # 编辑命令行ex = subprocess.Popen(_command_str, stdout=subprocess.PIPE, shell=True);out, err = ex.communicate();status = ex.wait();#_Timer.End();if not os.path.exists(result_json_filename):logger.error("结果未生成:"+svgfilename);return None;# 读取结果data = _ReadFile(result_json_filename)labelTextList = json.loads(data);# 删除临时文件os.remove(loc_json_filename);os.remove(result_json_filename);return labelTextList;

4.总结

JSON 是轻量级的文本数据交换格式,对程序员比较友好。

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

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

相关文章

全国市政公用事业和邮政、电信业发展数据,shp/excel格式

随着城市化进程的加速和人们对城市生活品质要求的提高,市政公用事业和邮政、电信业发展越来越受到关注。 今天我们来分享全国市政公用事业和邮政、电信业发展数据,为读者呈现一个更加全面的行业发展图景。 首先了解下数据的基本信息,格式为s…

2023亿发数字化智能工单,专业管理工单处理全流程,助力企业转型腾飞

伴随着智能化和信息化的不断深入,企业数字化转型势如腾飞。在这个过程中,工单管理成为生产、家电、后勤等多个管理场景下频繁应用的关键环节。如何满足管理方对设备、服务等智能化管理的需求,提升工单管理效率、规范管理流程,并实…

nginx:413 Request Entity Too Large

修改配置文件 nginx.conf,根据自己的实际情况修改大小 http {client_max_body_size 10m; }配置完成后重启nginx 参考文章 解决 413 Request Entity Too Large(请求实体太大)

Fiddler模拟弱网环境

1.设置弱网:Rules-》Customize Rules 上传速度:1KB/300ms1KB/0.3s3.33KB/s 下载速度:1KB/150ms1KB/0.15s6.67KB/s 2.启动弱网:Rules-》Performance-》Simulate Modem Speeds 开启后,此项为勾选状态 3.验证弱网生效…

光量子计算再创融资高峰!法国 Quandela获投5000万欧元

​(图片来源:网络) 法国光量子计算公司Quandela致力于开发首台光量子计算机,目前已获得超过5,000万欧元的巨额融资。投资者包括通过“法国2030计划”获得的法国政府支持以及银行合作伙伴、个人。新的投资者包括法国投资公司Seren…

第十九章 绘图

目录 Java绘图类 Graphics 类 Graphics2D类 绘制图形 绘图颜色与画笔属性 设置颜色 设置画笔 绘制文本 设置字体 显示文字 显示图片 图像处理 放大与缩小 图像翻转 图像旋转 图像倾斜 Java绘图类 Graphics 类 Grapics 类是所有图形上…

Idea 2023.2.5配置(插件、Maven等)

IDEA2023.2.5配置 一. 插件Alibaba Java Coding Guidelines plugin supportMaven HelperMyBatisXSonarLintTranslationVuesion Theme 二. 自定义创建live template,快速写代码三. 修改全局配置3.1 Maven配置3.1.1 安装MavenStep1. 下载Step2. 安装Step3. 创建系统环…

NV080D语音芯片:让智能快递柜取件更便利

随着互联网的普及和电子商务的迅速发展,网购消费已经成为了越来越多人的选择。这也催生了一个庞大的“网购一族”,他们购买的各种商品会通过快递公司送到家门口。然而,收取快递往往也伴随着一系列问题。比如,派送时间和收件人取件…

全职RISC-V芯片D1开发板使用adb串口COM连接设备和文件上传下载

将两个USB端口都连接到工作电脑 推荐使用ADB工具访问开发板,下载连接如下: Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip Mac版本:https://dl.google.com/android/repository/pla…

详解python淘宝秒杀抢购脚本程序实现

文章目录 前言一、官网下载火狐浏览器二、下载geckodriver,并解压到火狐浏览器文件夹根目录三、添加火狐浏览器根目录到系统环境变量四、下载并安装python及pycharm开发工具五、进入淘宝六、使用Pycharm运行脚本,新建python文件,将代码复制到…

MP3音频文件体积怎么缩小?压缩的方法有哪些?

压缩音频文件可减小文件的大小,从而更轻松地上传到其他平台,或轻松的通过电子邮件进行分享。除此之外,压缩音频文件还可以节省硬盘上的储存空间。那MP3音频文件体积怎么缩小呢?继续阅读可查看压缩的详细流程。 什么是音频文件压缩…

Jumpserver开启MFA认证,SecureCRT自动输入登录

1、JumpServer开启MFA认证 开启MFA认证: 开启后效果: 2、使用浏览器登录堡垒机,配置MFA 按需下载对应app进行绑定 到此手机绑定成功,登录时候可以在手机app查看动态码。 但是每次登录,都需要打开手机,…

BIO、NIO和AIO的区别

一、基础知识: I/O 模型的简单理解: 1.BIO(Blocking I/O):同步阻塞,一个线程处理一个通道上的事件。 2.NIO(Non-blocking I/O):同步非阻塞,使用选择器&…

RFID电网资产全寿命周期管理解决方案

一、方案背景 随着电网公司对电网资产全寿命周期管理的要求日益明确,许多电网公司已经开始积极推进存量资产PMS、PM与AM数据的联动对应,并将联动成果纳入资产全寿命周期管理一体化平台进行指标考核。然而,由于资产变动导致数据质量下降的问题…

数据库实验一 数据表的创建与修改管理

数据库实验一、数据表的创建与修改管理实验 一、实验目的二、设计性实验三、观察与思考 一、实验目的 (1) 掌握表的基础知识。 (2) 掌握使用SQL语句创建表的方法。 (3) 掌握表的修改、查看、删除等基本操作方法。 (4) 掌握表中完整性约束的定义。 (5) 掌握完整性约束的作用 二…

C#中集合和索引器

目录 一、集合 1.IEnumerable和IEnumerator接口 (1)示例:通过自定义集合存储商品信息 2.List和IList (1)示例1 (2)示例2 二、索引器 1.索引器与属性的区别 2.示例:通过索引…

leetcode:反转链表

题目描述 题目链接:206. 反转链表 - 力扣(LeetCode) 分析题目 思路一 我们可以设计算法让整个链表掉头 定义三个代码n1,n2,n3 n1指向NULL,n2指向head,n3指向第二个结点 当n2不为NULL的时候,让n2->ne…

2023年中国雷达设备市场规模及市场份额分析[图]

雷达设备行业是一种利用无线电波对目标进行探测和定位的技术,也被称为无线电探测和定位。雷达通过发射电磁波对目标进行照射并接收其回波,经波形处理后获取目标的位置和速度等信息。雷达具有探测距离远,测定精度高,不受天气和地形…

设计模式-访问者模式-笔记

Visitor模式 动机(Morivation) 在软件构建过程中,由于需求的变化,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担&am…

汇编基础知识

1.1 机器语言 机器语言就是一些二进制代码,存放在内存中。它是机器指令的集合,所谓机器指令就是机器能够正确执行的命令 1.2 汇编语言的产生 1.汇编语言的主体是汇编指令 2.汇编指令实际上就是机器指令的助记符。它们的唯一区别在于书写方式上 寄存器…