当前位置: 首页 > news >正文

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 是轻量级的文本数据交换格式,对程序员比较友好。

相关文章:

  • 2023年中国老年人护理用品市场规模及前景,呈现快速发展趋势[图]
  • 新能源充电桩工业4G路由器应用,推动绿色出行,响应环保理念
  • 【C++心愿便利店】No.14---C++之探索list底层原理
  • React自定义Hook之useRequest
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • 有SSL证书的网站更容易收录吗?
  • CentOS7安装Docker遇到的问题笔记
  • 4、FFmpeg命令行操作8
  • 基于SSM框架的WEB管理系统
  • 继承【C++】
  • el-tree 与table表格联动
  • 机器学习第10天:集成学习
  • Java变量和数据类型
  • 【算法】区间调度算法
  • mysql5.6 修改密码
  • 收藏网友的 源程序下载网
  • 【笔记】你不知道的JS读书笔记——Promise
  • ESLint简单操作
  • js递归,无限分级树形折叠菜单
  • Otto开发初探——微服务依赖管理新利器
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Vue.js源码(2):初探List Rendering
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • VuePress 静态网站生成
  • 技术发展面试
  • 解析 Webpack中import、require、按需加载的执行过程
  • 聊聊redis的数据结构的应用
  • 区块链共识机制优缺点对比都是什么
  • 如何解决微信端直接跳WAP端
  • 新书推荐|Windows黑客编程技术详解
  • 阿里云ACE认证之理解CDN技术
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • #FPGA(基础知识)
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $.proxy和$.extend
  • (4) PIVOT 和 UPIVOT 的使用
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (四) 虚拟摄像头vivi体验
  • (一)Dubbo快速入门、介绍、使用
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .NET 中的轻量级线程安全
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET序列化 serializable,反序列化
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • // an array of int
  • @Builder用法
  • @selector(..)警告提示
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [14]内置对象
  • [20171101]rman to destination.txt
  • [2018-01-08] Python强化周的第一天
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [android学习笔记]学习jni编程
  • [Angularjs]asp.net mvc+angularjs+web api单页应用