Python json.dumps() 将我的所有数据输出到一行,但我希望每个条目都有一个新行
Posted
技术标签:
【中文标题】Python json.dumps() 将我的所有数据输出到一行,但我希望每个条目都有一个新行【英文标题】:Python json.dumps() outputs all my data into one line but I want to have a new line for each entry 【发布时间】:2021-02-24 05:12:06 【问题描述】:我正在使用 Python 和一些 json 数据。我正在遍历我的数据(都是字典),当我将循环值打印到控制台时,每行得到 1 个字典。
但是,当我使用 json.dumps() 执行同一行代码以将我的对象转换为能够输出的字符串时,我会在字典中得到多行,而不是希望字典之外的新行。
循环时如何在每个字典值后添加新行?
代码示例:
def test(values, filename):
with open(filename, 'w') as f:
for value in values:
print(json.dumps(value, sort_keys=True)) # gives me each dictionary in a new line
f.write(json.dumps(value, sort_keys=True, indent=0) #gives me a new line for each key/value pair instead of after each dictionary.
控制台输出:
"first_name": "John", "last_name": "Smith", "food": "corn"
"first_name": "Jane", "last_name": "Doe", "food": "soup"
在我的输出文件中输出:
"first_name": "John", "last_name": "Smith", "food": "corn""first_name": "Jane", "last_name": "Doe", "food": "soup"
我缺少什么代码来为每个字典值换行以使我的输出文件看起来与我的控制台相同?
【问题讨论】:
请注意,如果您一次转储并写入一个值,您将不会生成有效的 json 文件,而是ndjson 文件。即您的文件将不是有效的 json,但每一行本身都是有效的 json。这真的是你想要的吗?print
添加换行符。 file.write
没有。
你可以做print(json.dumps(value, sort_keys=True), file=f)
【参考方案1】:
您可以在每个f.write(json.dumps(value, sort_keys=True, indent=0
之后换行
像这样 -
f.write('\n')
【讨论】:
谢谢。我的输出文件看起来正是我想要的样子! :)【参考方案2】:您只需在每次迭代后添加一个换行符。
f.write("\n")
另外请不要与writelines
method 混淆。它也不附加换行符,所以你必须自己处理它。
【讨论】:
【参考方案3】:如果您想生成有效的 JSON 文件,您需要一次写入所有值,而不是一次写入一个值(这将生成 ndjson 或 JSON lines)
所以,对于一个有效的 JSON
values = ["first_name": "John", "last_name": "Smith", "food": "corn",
"first_name": "Jane", "last_name": "Doe", "food": "soup"]
import json
with open('some_file.json', 'w') as f:
json.dump(values, f, indent=4)
some_file.json
[
"first_name": "John",
"last_name": "Smith",
"food": "corn"
,
"first_name": "Jane",
"last_name": "Doe",
"food": "soup"
]
如果你真的需要 ndjson
- 你可以使用 ndjson package(需要通过 PyPi 的 pip
安装)。
import ndjson
with open('some_file2.ndjson', 'w') as f:
ndjson.dump(values, f)
some_file2.ndjson
"first_name": "John", "last_name": "Smith", "food": "corn"
"first_name": "Jane", "last_name": "Doe", "food": "soup"
ndjson
包的替代品是jsonlines 包
【讨论】:
以上是关于Python json.dumps() 将我的所有数据输出到一行,但我希望每个条目都有一个新行的主要内容,如果未能解决你的问题,请参考以下文章
python中的json.dump()和json.dumps()有啥区别?
Python中json.dump()和json.dumps()的区别