python - 为什么打印输出包含 '\n' 而不是断行?
问题描述
我正在获取 json 文件并将其转换为带有脚本的 yaml 文件。
我在 bash shell 脚本中使用了 python 代码,如下所示:
#!/bin/bash
#python - ${INSTALL_DIR}/storm-tmp.json > ${INSTALL_DIR}/storm.yaml << EOF
python - ${INSTALL_DIR}/storm-tmp.json << EOF
import os
import sys
import json
with open(sys.argv[1], 'r') as f:
obj = json.load(f)
lines_to_write = []
for key in obj:
value = obj[key]
value = value.replace('\\n','\n')
print(('%s: %s')%(key, value))
EOF
我希望输出类似于:
storm.log.dir: /logs
storm.zookeeper.servers:
- zkserver-0.zookeeper.com
- zkserver-1.zookeeper.com
- zkserver-2.zookeeper.com
storm.local.dir: /data
nimbus.seeds:
- stormnimbus-0.storm.com
但打印输出是:
storm.log.dir: /logs
storm.zookeeper.servers: \n - zkserver-0.zookeeper.com\n - zkserver-1.zookeeper.com\n - zkserver-2.zookeeper.com
storm.local.dir: /data
nimbus.seeds: \n - stormnimbus-0.storm.com
我不知道为什么这个\n
字符没有被翻译成换行符。
我该如何解决这个问题?
已编辑
输入:
{
"storm.log.dir" : "/logs",
"nimbus.seeds" : "\\n - stormnimbus-0.storm.com",
"storm.local.dir" : "/data",
"storm.zookeeper.servers" : "\\n - zkserver-0.zookeeper.com\\n - zkserver-1.zookeeper.com\\n - zkserver-2.zookeeper.com"
}
解决方案
在 bash 中做这种嵌套的反斜杠是很痛苦的。你需要:
value = value.replace('\\\\n','\\n')
有了这个,你的脚本对我有用。
顺便说一句, 您可以替换它:
for key in obj:
value = obj[key]
有了这个:
for key,value in obj.items():
推荐阅读
- java - 如何在 recycleView 中创建 CardView?
- r - 尝试对曲线下面积 (AUC) 进行积分,错误为“match.fun(f) 中的错误:'a1$iso' 不是函数、字符或符号”
- protocol-buffers - 无法在 ami linux2 上安装 mysql_xdevapi
- python - 如何在使用 Selenium Webdriver 查找元素时正确使用 '{}'.format()
- javascript - 错误:无法在控制台中读取 null 的属性“insertAdjacentHTML”
- unix - 无法在 cron 作业的脚本中记录 netcat 输出
- angular - 如何在 Angular Guard 中使用 CombineLatest 和 Ngrx
- jinja2 - 无法使 Salt 状态下的 IF OR Jinja 逻辑工作
- android - 错误:'E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher' 使用本机反应
- r - 尝试在 JAGS 中重新定义节点编译错误