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

JSON不允许多行字符串:

>>> import json

>>> json.dumps(dict(text='first line

second line'))

'{"text":"first line\

second line"}'

我想要的输出:

{"text":"first line

second line"}

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

我不在乎是否使用简单的引号"或tripple引号(如在Python中)"""。

是否有一个易于人类可读的文本数据交换格式支持这个?

用例

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

你能详细说明数据格式/目的,即复杂的结构或一些设置/配置文件等。

@NabeelAhmed我想用它进行配置。 许多应用程序发明了自己的配置语言。 我想避免这种情况。 但是json和ConfigParser并不满足我。 Json不允许带换行符的字符串(仅 n)和ConfigParser不允许嵌套数据结构。 我缺少的下一件事:验证(但这是一个不同的主题)。 亲爱的Nabeel,如果有遗漏,请留下新评论。

我想如果你可以替换转储结果,那么结果应该是正确的。data = json.dumps(dict(text='first line

second line')) data = data.replace('\

', '

') print(data)

我认为你应该考虑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。

赞成为打油诗。

你评论的答案:

I want to use it for configuration. A lot of applications invent

their own configuration language. I want to avoid this. But json and

ConfigParser don't satisfy me. Json does not allow strings with

newlines (only

) and ConfigParser does not allow nested data

structures. Next thing that I am missing: Validation (But this is a

different topic).

ConfigParser,ConfigObj或YAML(PyYAML)有3个主要选项 - 每个选项都有其特定的优点和缺点。对于您的用例即配置文件,所有3个优于JSON。

现在进一步说,哪一个更好取决于你想要在conf文件中存储什么。

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

ConfigObj非常简单,然后使用YAML(也就是ConfigParser)。支持默认值和类型,还包括验证(优于ConfigParser)。

ConfigObj简介

When you perform validation, each of the members in your specification

are checked and they undergo a process that converts the values into

the specified type. Missing values that have defaults will be filled

in, and validation returns either True to indicate success or a

dictionary with members that failed validation. The individual checks

and conversions are performed by functions, and adding your own check

function is very easy.

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

有用的网址:

一个简短的ConfigObj教程

ConfigObj 5简介和参考

在比较YAML与ConfigParser和ConfigObj之间有可靠的SO答案:

什么更好,ConfigObj或ConfigParser?

ConfigObj / ConfigParser与使用YAML for Python设置文件

如果你对标记开销没问题,可以使用ElementTree(标准库)或lxml的XML:

数据

Lorem

Ipsum

Dolor

脚本

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

如果文件仅由Python使用(忽略交换),您可以简单地将数据放在python脚本文件中并将其作为模块导入:

数据

datum_1 =""" lorem

ipsum

dolor

"""

datum_list = [1,"""two

liner"""]

datum_dict = {"key": None,"another": [None, 42.13]}

datum_tuple = ("anything","goes")

脚本

from data import *

d = [e for e in locals() if not e.startswith("__")]

print( d )

for k in d:

print( k, locals()[k] )

产量

['datum_list', 'datum_1', 'datum_dict', 'datum_tuple']

datum_list [1, 'two

liner']

datum_1  lorem

ipsum

dolor

datum_dict {'another': [None, 42.13], 'key': None}

datum_tuple ('anything', 'goes')

更新:

代码与字典理解

from data import *

d = {e:globals()[e] for e in globals() if not e.startswith("__")}

for k in d:

print( k, d[k] )

ini格式也支持多行字符串; Python stdlib中的configparser可以处理它。请参阅https://docs.python.org/3/library/configparser.html#supported-ini-file-structure。

如果您使用的是Python 2,我实际上认为json可以满足您的需求。您可以在解码和加载json时使用string-escape对其进行解码和编码:

import json

config_dict = {

'text': 'first line

second line',

}

config_str = json.dumps(config_dict).decode('string-escape')

print config_str

config_dict = json.loads(config_str.encode('string-escape'))

print config_dict

输出:

{"text":"first line

second line"}

{u'text': u'first line

second line'}

因此,您可以使用解码后的字符串来编辑JSON,包含换行符,并在读取时,只需使用string-escape进行编码即可获取字典。

不确定我是否正确理解了你的问题,但你不是要求这样的事吗?

my_config = {

"text":"""first line

second line"""

}

print my_config

这是什么样的数据格式? 你展示了Python的来源。 这已经是用户"句柄"的答案。

@guettli哦,没错,我的观点与"处理"用户完全相同。

文本解析 python 多行,关于python:基于文本的数据格式,支持多行字符串相关推荐

  1. python爬小红书_基于文本分析和SEM模型的小红书用户粘性研究

    基于文本分析和 SEM 模型的小红书用户粘性研究 文/曹增栋 罗迪维 杨炳新 王心贝 [摘 要] 摘要:本文利用 Python 软件爬取小红书用户评论的 27900 条数据, 通过 jieba 分词提 ...

  2. linux ranger 文本模式,Ranger – 给命令行用户一个基于文本的文件管理器

    所以,你可以看到ranger在图像浏览器中打开文件.这个文件管理器另一个功能是,被选择的文件如果可能的话,可以在文件管理器中预览文件. 这是示例截图: 所以你可以看到当CMS文件被选中时,预览它的内容 ...

  3. 使用Word2Vec完成基于文本相似度的推荐

    使用 Word2Vec 完成基于文本相似度的推荐 之前的基于文本相似度的推荐使用的是one-hot的词向量,虽然可以使用稀疏向量来存储里面的非0值,但是以这种形式的词向量存在很多问题: 稀疏的向量表达 ...

  4. python大文本文件处理软件_Python文本处理之按行处理大文件的方法

    python 文本处理,利用python脚本处理任意文件,取希望实现功能: $logprocessor.py 其中> love,w ./readit.p被爱的人不需千军万马,毫不费力,便占据一片 ...

  5. python自动生成鸡汤文_马尔可夫链文本生成的简单应用:不足20行的Python代码生成鸡汤文...

    提到自然语言的生成时,人们通常认为要会使用高级数学来思考先进的AI系统,然而,并不一定要这样.在这篇文章中,我将使用马尔可夫链和一个小的语录数据集来产生新的语录. 马尔可夫链 马尔可夫链是一个只根据先 ...

  6. NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码

    NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码 目录 全部代码 相关文章 NLP之情感分析:基于python编程(jieba库)实现中文文本情 ...

  7. Python 文本解析器

    一.实验介绍 1.1 实验内容 讲解一个使用 Python 来解析纯文本生成一个 HTML 页面的小程序. 将学习和实践以下知识点: Python 基本语法 HTML 标记语言 1.2 实验知识点 P ...

  8. python语法元素测试_基于python全局设置id 自动化测试元素定位过程解析

    背景: 在自动化化测试过程中,不方便准确获取页面的元素,或者在重构过程中方法修改造成元素层级改变,因此通过设置id准备定位. 一.python准备工作: 功能:用自动化的方式进行批量处理. 比如,你想 ...

  9. 【Python】基于文本匹配的微信自动问答

    [Python]基于文本匹配的微信自动问答 摘要 一.引言 二.相关工作 三.方法描述 1.数据预处理 2.特征提取 3.文本匹配 四.代码部分 五.实验结果 六.总结 摘要   本文针对传统的基于规 ...

最新文章

  1. 迟到4个月的华为P50,没有5G只有4G,售价4488元起
  2. Vmware ESX server CPU掩码导致的挂起
  3. 机器学习 KNN算法_0 丐版(matlab实现)
  4. PyG图神经网络框架torch-geometric安装
  5. 图像处理-直方图均衡化
  6. Unity3D-协同程序
  7. 大班音乐机器人反思_大班音乐教案:机器人教案及教学反思
  8. Your password has expired. To log in you must change it using a client that supports expired pass...
  9. 笔记本电脑如何强制关机_笔记本按电源按钮不能关机只是关闭屏幕的解决办法...
  10. redis怎么不让存byte_Redis 删除数据后不能自动释放内存么?
  11. TensorFlow工作笔记002---Centos7.3下TensorFlow使用python创建计算图案例
  12. TensorFlow基础篇(五)——tf.constant()
  13. 7个碎片的excel重组实验
  14. 感知层在物联网中的重要性
  15. matlab中如何画柱状图,matlab如何画柱状图?matlab绘制柱状图教程
  16. 上传Android library到JitPack
  17. bert代码解读2之模型transformer的解读
  18. JavaScript获取当前时区 时间转换
  19. ZDNET的一个技术博客评选结果
  20. 作为审稿人,你什么情况下会选择拒稿?

热门文章

  1. 牛客16438 回文日期
  2. 第二章 数据的表示和运算 2.1.1 进位计数制 [计算机组成原理笔记]
  3. asp:dropdownlist如何去掉三角箭头_一棵悬崖三角枫的培养过程
  4. stm32按键输入实验c语言,stm32f103学习笔记(三)按键输入(IO口输入)
  5. cmos和ttl_TTL电平和CMOS电平的区别
  6. 我的一个树莓派小车项目
  7. 怎么用python编写个apk_新手用tkinter写了一个APK提取工具
  8. PyTorch框架学习九——网络模型的构建
  9. mysql判断不等于空的脚本_Shell脚本中判断输入变量或者参数是否为空的方法
  10. C++学习之路 | PTA乙级—— 1014 福尔摩斯的约会 (20分)(精简)