前景

Python编写HDFS服务安装的过程中,需要将构建好的JSON对象输出到文件,采用那种方式更便捷

方案1

open 函数
    def writeExecCmdCheckActionsFile(self, out_res, check_item):
"""
输出到文件
"""
try:
# host_check_java_env_check.result
self.hostCheckCustomActionsFilePath = self.hostCheckCustomActionsFilePath + check_item + '.result'
print("Host check custom action report at " + self.hostCheckCustomActionsFilePath)
with open(self.hostCheckCustomActionsFilePath, 'w+') as configfile:
configfile.write(str(out_res))
except Exception as err:
logging.error("Can't write host check file at %s :%s " % (self.hostCheckCustomActionsFilePath, err))

上述代码中with open(self.hostCheckCustomActionsFilePath, 'w+') as configfile: 打开了文件流对象 configfile, 用write()方法将字符串写入

write()方法

write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。

write()方法不会在字符串的结尾添加换行符('\n'):

注意:configfile.write(str(out_res)) 中,out_res 是一个Python json对象,不是字符串,所以用 str() 将json转为str,然后再写入

如果不想用 str() 方法转换,可以采用如下第二种方案

方案2

JSON模块

导入json库

import json
用法
  • json.dumps() 将Python对象编码成json字符串
  • json.dump() 将Python对象转化为json存储到文件中
  • json.load() 将文件中的json格式转化成Python对象提取出来
  • json.loads() 将json字符串编码成Python对象
测试

json.dumps json 对象--->str

import json

def run1():
# 定义一个json对象
a = {"name": "zhangsan", "age": 18}
print(type(a))
b = json.dumps(a)
print(type(b)) if __name__ == '__main__':
run1()
--------------输出------------
<class 'dict'>
<class 'str'>

json.dump json对象写入text.txt

def run2():
try:
file = "text.txt"
a = {"name": "zhangsan", "age": 18}
with open(file, 'w') as f:
json.dump(a, f)
except Exception as e:
print(e)

当前目录下输出一个文件text.txt,内容如下

{"name": "zhangsan", "age": 18}

json.load json文件--> json对象

def run3():
"""
text.txt --> json type
:return:
"""
try:
file = "text.txt"
with open(file, 'r') as f:
return json.load(f)
except Exception as e:
print(e) if __name__ == '__main__':
a = run3()
print(type(a))
--------输出如下------------
<class 'dict'>

json.loads() json字符串--> json对象

def run4():
# 定义一个json字符串
a = """{"name": "zhangsan", "age": 18}"""
print(type(a))
b = json.loads(a)
print(type(b))
------输出如下-----
<class 'str'>
<class 'dict'>

总结

在本次编码中,需求是将构建好的Json对象返回,最终写入文件,所以选择json.dump()

代码如下:

    def output_file(self, data, fun):
try:
logfile = self.outFilePath + "_" + fun + '.result'
print("function output file:" + logfile)
with open(logfile, 'w') as f:
json.dump(data, f)
except Exception as e:
logging.error("ouput to file error" + str(e))

data: json对象

logfile: 当前路径下的输出文件名称

执行 hdfs_config.py 最终输出如下:

-rw-r--r--. 1 root root    99 10月 27 12:56 hdfs_install_task_checkHDFSGroup.result
-rw-r--r--. 1 root root 99 10月 27 12:56 hdfs_install_task_checkHDFSUser.result
-rw-r--r--. 1 root root 238 10月 27 12:56 hdfs_install_task_chown2Hadoop.result
-rw-r--r--. 1 root root 53512 10月 27 12:56 hdfs_install_task_decompressionHDFS.result
-rw-r--r--. 1 root root 123 10月 27 12:56 hdfs_install_task_lnsHDFSConfig.result
-rw-r--r--. 1 root root 223 10月 27 12:56 hdfs_install_task_makeHDFSDir.result
-rw-r--r--. 1 root root 100 10月 20 11:30 checkWebUI.py
-rw-r--r--. 1 root root 747 10月 25 11:56 datanode.py
-rw-r--r--. 1 root root 23344 10月 27 12:55 hdfs_config.py ## 执行脚本
-rw-r--r--. 1 root root 24886 10月 27 12:41 hdfs_install_task

内容:

{"exit_code": 0, "exec_cmd": "ln -s /srv/dstore/1.0.0.0/hdfs/etc /etc/dstore/1.0.0.0/hdfs", "message": "ln -s is success!"}

Python之JSON用法解析的更多相关文章

  1. Python中json.loads解析包含\n的字符串会出错

    用python中的json.loads解析字符串,失败了. [解决过程] 1.调试了半天,终于发现,如果把其中的: "呵呵加那么多连接啊\n\n这个标准还是不错的\n\n给大家推荐一个更多的 ...

  2. paper 161:python的Json数据解析

    概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态 ...

  3. Python | JSON 数据解析(Json & JsonPath)

    一.什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一 ...

  4. Python 下JSON的两种编解码方式实例解析

    概念   JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写.在日常的工作中,应用范围极其广泛.这里就介绍python下它的两种编解码方法: ...

  5. 【python】使用openpyxl解析json并写入excel(xlsx)

    目标: 将json文本解析并存储到excel中 使用python包 openpyx import simplejsonmport codecsimport openpyxl import os # d ...

  6. python命令行参数解析OptionParser类用法实例

    python命令行参数解析OptionParser类用法实例 本文实例讲述了python命令行参数解析OptionParser类的用法,分享给大家供大家参考. 具体代码如下:     from opt ...

  7. 利用python将excel数据解析成json格式

    利用python将excel数据解析成json格式 转成json方便项目中用post请求推送数据自定义数据,也方便测试: import xlrdimport jsonimport requests d ...

  8. python 导入json模块的用法

    json用于字符串,和 python数据类型间进行转换,json模块有四个功能,dumps,dump,loads,load. json 用法 json.dumps 将数据通过特殊的形式转换为所有程序语 ...

  9. python安装json的方法;以及三种json库的区别

    python中的json解释库有好几个,不同版本使用方法不同. 常用有 json-py 与smiplejson 两个包 其中,json-py 包含json.py外,还有一个minjson,两者用法上有 ...

  10. Form表单 JSON Content-type解析

    Form表单 JSON Content-type解析 1 表单Form概述 在Form表单中,参数一般有: action 表单提交的url method 提交方式:post get name 表单的属 ...

随机推荐

  1. Navicat 15 for MySQL 破解教程

    Navicat 15 for MySQL安装包和注册机下载: 安装包:https://kohler.lanzouh.com/irtcd05za1zc 注册机:https://kohler.lanzou ...

  2. 解决auditwheel repair过程rpath被修改的问题

    问题背景 AuditWheel是一个用于修复Python的whl包的工具,例如在这个CyFES开源库中,因为使用到了Cython和CUDA编译动态链接库的技术,方便Python调用.但是在编译CUDA ...

  3. WebShell流量特征检测_中国菜刀篇

    80后用菜刀,90后用蚁剑,95后用冰蝎和哥斯拉,以phpshell连接为例,本文主要是对这四款经典的webshell管理工具进行流量分析和检测. 什么是一句话木马? 1.定义 顾名思义就是执行恶意指 ...

  4. Docker 知识梳理及其安装使用

    Docker 介绍 Docker 是一个强大的工具,用于高效开发.打包和部署应用程序.Docker 是一种容器管理服务.Docker 于 2013 年发布.它是开源的,可用于 Windows.macO ...

  5. 推荐3款卓越的 .NET 开源搜索组件库

    前言 最近有不少同学提问:.NET有哪些开源的搜索组件库可以推荐的吗?,今天大姚给大家推荐3款卓越的 .NET 开源搜索组件库,希望可以帮助到有需要的同学. Elasticsearch .NET El ...

  6. IDEA 换了电脑,如何导入和导出配置?

    前言 我们在使用IDEA开发时,经常会设置各种各样的配置,时间一长,就会有很多个性化的东西.用起来也越来越顺手.   不过这里可能会有个问题,那就是哪一天我们要换个电脑了,或者想安装新版本的IDEA时 ...

  7. Flutter 不容错过的 7 大亮点 | Google I/O 精彩回顾

    Flutter 在今年的 Google I/O 上发布了许多重磅更新,欢迎大家和我们一起了解其中不容错过的 7 大亮点, 点击这里 观看 Flutter 不容错过的 7 大亮点 视频了解更多信息. F ...

  8. 线段树与离散化技巧 Mayor's posters——poj 2528

    问题描述: 有一堵海报墙,从左到右一共有10000000个小块,墙上贴了许多海报,每张海报的高度与墙的高度相同,宽度不同,新帖的海报会将原有的海报覆盖,问当所有人把海报贴完是,墙上可以看到几张海报 输 ...

  9. 【赵渝强老师】NoSQL数据库之Cassandra基础

    一.Cassandra简介 Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable.其主要功能比Dynamo (分布式的Key-Value存储系统)更丰富,但支持度却不如 ...

  10. 《Vue.js 设计与实现》读书笔记(1-3章)

    第 1 章.权衡的艺术 命令式 or 声明式 命令式:关注过程 声明式:关注结果 声明式直接声明想要的结果,框架帮用户封装好命令式的代码,所以在封装的过程中要做一些其他的事情来(生成要做的事情/找出差 ...