当前位置: 首页 > 知识库问答 >
问题:

支持多行字符串的基于文本的数据格式

邓元白
2023-03-14

我搜索一种支持多行字符串的基于文本的数据格式。

JSON不允许多行字符串:

>>> import json
>>> json.dumps(dict(text='first line\nsecond line'))
'{"text": "first line\\nsecond line"}'

我想要的输出:

{"text": "first line
second line"}

这个问题是关于输入和输出的。数据格式应该可以使用vi、emacs或记事本等编辑器进行编辑。

我不在乎简单引号或三重引号(如在Python中)>”“”

有没有一种易于人类阅读的文本数据交换格式支持这一点?

我想用vi编辑多行字符串的数据。如果数据是 json 格式,这并不好玩。

共有3个答案

禄俊逸
2023-03-14

带有ElementTree(标准库)的XML或lxml(如果您对标记开销没有问题):

数据

<?xml version="1.0"?>
<data>
  <string>Lorem
Ipsum
Dolor
  </string>
</data>

脚本

import xml.etree.ElementTree
root = xml.etree.ElementTree.parse('data.xml').getroot()
for child in root:
  print(child.tag, child.attrib, child.text)

输出

string {} Lorem
Ipsum
Dolor
林祯
2023-03-14

关于您的评论:

我想使用它进行配置。许多应用程序都发明了自己的配置语言。我想避免这种情况。但json和ConfigParser不能满足我的要求。json不允许使用带有换行符的字符串(仅\n),ConfigParsers不允许使用嵌套数据结构。接下来我缺少的是:验证(但这是一个不同的主题)。

有3个主要选项,ConfigParser、ConfigObj或YAML (PyYAML),每个选项都有各自的优缺点。对于您的用例(即配置文件)来说,这3种方法都比JSON好。

现在,哪一个更好,取决于您到底想在conf文件中存储什么。

ConfigObj-用于配置和验证(您的用例):

ConfigObj比YAML(也是ConfigParser)更容易使用。支持默认值和类型,还包括验证(相对于ConfigParser是一个巨大的优势)。

ConfigObj简介

执行验证时,将检查规范中的每个成员,并对它们进行一个将值转换为指定类型的过程。将填写缺省值,然后验证返回True以指示成功,或者返回包含验证失败成员的字典。单独的检查和转换由函数执行,添加您自己的检查函数非常容易。

附言:是的,它允许多行值。

有用的链接:

简要配置Obj教程

ConfigObj 5简介和参考

YAML与ConfigParser与ConfigObj的比较中有可靠的SO答案:

ConfigObj或ConfigParser哪个更好?

配置对象/配置计算器与使用 YAML 进行 Python 设置文件

钱旻
2023-03-14

我认为你应该考虑YAML格式。它支持块表示法,能够像这样保留换行符

data: |
   There once was a short man from Ealing
   Who got on a bus to Darjeeling
       It said on the door
       "Please don't spit on the floor"
   So he carefully spat on the ceiling

此外,还有许多用于任何编程语言的解析器,包括python(例如pyYaml)。

此外,任何有效的JSON都是YAML,这也是一个巨大的优势。

 类似资料:
  • 8.6. 基于 dictionary 的字符串格式化 为什么学习 locals 和 globals? 因为接下来就可以学习关于基于 dictionary 的字符串格式化。或许您还能记起, 字符串格式化 提供了一种将值插入字符串中的一种便捷的方法。值被列在一个 tuple 中, 按照顺序插入到字符串中每个格式化标记所在的位置上。尽管这种做法效率高,但还不是最容易阅读的代码,特别是当插入多个值的时候。

  • 问题内容: 我试图根据给定的语言环境以不同的方式格式化Java中的日期。例如,我希望英语用户看到“ 2009年11月1日”(格式为“ MMM d,yyyy”),而挪威用户希望看到“ 1. nov。2009”(“ d。MMM。yyyy”)。 如果将语言环境添加到SimpleDateFormat构造函数中,则月份部分工作正常,但是其余部分呢? 我希望可以将与语言环境配对的格式字符串添加到SimpleD

  • 我在Excel文件中有数据,我需要使用它来使用SVM执行多标签分类。它有两列,如下所示。“推文”-A、B、C、D、E、F、G和“类别”=X、Y、Z 推文类别 一个X B Y C Z D X,Y E Y,Z F X,Y,Z G X,Z 给出一条推特,我想训练我的模型预测它所属的类别。推文和类别都是文本。我正在尝试使用Weka的LibSVM分类器进行分类,因为我读到它可以进行多标签分类。我将csv文件

  • Mocha支持断言库中任何抛出的s err.expected和err.actual属性AssertionError。mocha将尝试显示预期内容与断言实际看到的内容之间的差异。这是一个“字符串”差异的例子:

  • 本文向大家介绍基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合,包括了基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合的使用技巧和注意事项,需要的朋友参考一下 在上篇给大家介绍了基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支

  • 19.3.1. 著名的文本(WKT)格式 19.3.2. 著名的二进制(WKB)格式在本节中,介绍了用于表示查询中几何对象的标准空间数据格式。它们是: ·著名的文本(WKT)格式 ·著名的二进制(WKB)格式 从其内部看,MySQL以不完全等同于WKT或WKB的格式保存几何对象值。 19.3.1. 著名的文本(WKT)格式对于Geometry的著名文本(WKT)表示,它是为与采用ASCII格式的几