文本解析 python 多行,关于python:基于文本的数据格式,支持多行字符串
我搜索支持多行字符串的基于文本的数据格式。
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:基于文本的数据格式,支持多行字符串相关推荐
- python爬小红书_基于文本分析和SEM模型的小红书用户粘性研究
基于文本分析和 SEM 模型的小红书用户粘性研究 文/曹增栋 罗迪维 杨炳新 王心贝 [摘 要] 摘要:本文利用 Python 软件爬取小红书用户评论的 27900 条数据, 通过 jieba 分词提 ...
- linux ranger 文本模式,Ranger – 给命令行用户一个基于文本的文件管理器
所以,你可以看到ranger在图像浏览器中打开文件.这个文件管理器另一个功能是,被选择的文件如果可能的话,可以在文件管理器中预览文件. 这是示例截图: 所以你可以看到当CMS文件被选中时,预览它的内容 ...
- 使用Word2Vec完成基于文本相似度的推荐
使用 Word2Vec 完成基于文本相似度的推荐 之前的基于文本相似度的推荐使用的是one-hot的词向量,虽然可以使用稀疏向量来存储里面的非0值,但是以这种形式的词向量存在很多问题: 稀疏的向量表达 ...
- python大文本文件处理软件_Python文本处理之按行处理大文件的方法
python 文本处理,利用python脚本处理任意文件,取希望实现功能: $logprocessor.py 其中> love,w ./readit.p被爱的人不需千军万马,毫不费力,便占据一片 ...
- python自动生成鸡汤文_马尔可夫链文本生成的简单应用:不足20行的Python代码生成鸡汤文...
提到自然语言的生成时,人们通常认为要会使用高级数学来思考先进的AI系统,然而,并不一定要这样.在这篇文章中,我将使用马尔可夫链和一个小的语录数据集来产生新的语录. 马尔可夫链 马尔可夫链是一个只根据先 ...
- NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码
NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码 目录 全部代码 相关文章 NLP之情感分析:基于python编程(jieba库)实现中文文本情 ...
- Python 文本解析器
一.实验介绍 1.1 实验内容 讲解一个使用 Python 来解析纯文本生成一个 HTML 页面的小程序. 将学习和实践以下知识点: Python 基本语法 HTML 标记语言 1.2 实验知识点 P ...
- python语法元素测试_基于python全局设置id 自动化测试元素定位过程解析
背景: 在自动化化测试过程中,不方便准确获取页面的元素,或者在重构过程中方法修改造成元素层级改变,因此通过设置id准备定位. 一.python准备工作: 功能:用自动化的方式进行批量处理. 比如,你想 ...
- 【Python】基于文本匹配的微信自动问答
[Python]基于文本匹配的微信自动问答 摘要 一.引言 二.相关工作 三.方法描述 1.数据预处理 2.特征提取 3.文本匹配 四.代码部分 五.实验结果 六.总结 摘要 本文针对传统的基于规 ...
最新文章
- 迟到4个月的华为P50,没有5G只有4G,售价4488元起
- Vmware ESX server CPU掩码导致的挂起
- 机器学习 KNN算法_0 丐版(matlab实现)
- PyG图神经网络框架torch-geometric安装
- 图像处理-直方图均衡化
- Unity3D-协同程序
- 大班音乐机器人反思_大班音乐教案:机器人教案及教学反思
- Your password has expired. To log in you must change it using a client that supports expired pass...
- 笔记本电脑如何强制关机_笔记本按电源按钮不能关机只是关闭屏幕的解决办法...
- redis怎么不让存byte_Redis 删除数据后不能自动释放内存么?
- TensorFlow工作笔记002---Centos7.3下TensorFlow使用python创建计算图案例
- TensorFlow基础篇(五)——tf.constant()
- 7个碎片的excel重组实验
- 感知层在物联网中的重要性
- matlab中如何画柱状图,matlab如何画柱状图?matlab绘制柱状图教程
- 上传Android library到JitPack
- bert代码解读2之模型transformer的解读
- JavaScript获取当前时区 时间转换
- ZDNET的一个技术博客评选结果
- 作为审稿人,你什么情况下会选择拒稿?
热门文章
- 牛客16438 回文日期
- 第二章 数据的表示和运算 2.1.1 进位计数制 [计算机组成原理笔记]
- asp:dropdownlist如何去掉三角箭头_一棵悬崖三角枫的培养过程
- stm32按键输入实验c语言,stm32f103学习笔记(三)按键输入(IO口输入)
- cmos和ttl_TTL电平和CMOS电平的区别
- 我的一个树莓派小车项目
- 怎么用python编写个apk_新手用tkinter写了一个APK提取工具
- PyTorch框架学习九——网络模型的构建
- mysql判断不等于空的脚本_Shell脚本中判断输入变量或者参数是否为空的方法
- C++学习之路 | PTA乙级—— 1014 福尔摩斯的约会 (20分)(精简)