解释metapost的工具

metapost的Python项目详细描述


这个python包帮助开发人员解析metapost文件。

meta post允许将元数据附加到标记文件中,例如一篇文章的title在索引页上,这表示文章是否应该放在索引页上--以最人性化的可读性和可管理性的方式。

用例

metapost旨在帮助开发人员在构建cms服务时有效地操作模拟数据。 你可以把一堆标记文件(带有meta-info)放在一个文件夹里, 然后使用metapostreader将它们解析为字典列表, 可通过ORM模块轻松导入数据库。

metapost的工作原理

  • metapost文件是一个标准的markdown文件,扩展名为.md
  • 除了一件事-metapost应该以代码块开头,它将被解析为文件的元。
  • 代码块的内容不应该是json或yaml,它是一种特殊但易于学习的格式,旨在优化可读性和可管理性。
  • 此软件包提供操作metapost文件所需的工具,例如读取和导出。
  • 本项目中的降价解析器基于john gruber的降价

metapost非常简单和强大。下面的示例将演示如何实现它。

示例

快速启动

在本节中,我们将演示如何将metapost(标记)文件解析为可与应用程序交互的有用格式。请注意,元内容既不是json也不是yaml,它是由冒号分隔的键值对。

首先,通过pypi安装软件包

pip install metapost

假设我们有这样一篇metapost(.md文件)文章。该文件以包含元的代码块开头,元包含在三个连续的反勾号(```)中。

` ` `
title: Example post
ranking: 999
on_top: true
keywords: ["markdown", "meta", "microblog"]
work_hours: 35.6
` ` `

--- ↑↑↑    Meta Block    ↑↑↑ ---
--- ↓↓↓ Markdown Content ↓↓↓ ---

Be careful we use ` ` ` here just because we can't escape backtick in the code block of github. 

You should always use ``` in your markdown file.

现在,我们将使用包中的metapostreader解析文件:

# import packagefrommetapostimportMetaPostReader# set file pathpath=".\myMetaPostFilepath.md"# instantiate MetaPostReadermtpr=MetaPostReader()mtpr.set_strict_mode(False)# read and export to python dictresult=mtpr.read_file(path).to_dict()print(result)

输出为:

[{
    "meta":{"title":"Example post",
            "rank":"999",
            "on_top":"true",
            "keywords":'["markdown", "meta", "microblog"]',
            "work_hours": "35.6"}
    "html":"<p>......</p>"
}]

嗯,没那么令人印象深刻,对吧?所有值都被解析为字符串,而不是布尔、整数或其他有用的数据类型。

设置元配置

在metapostreader上设置meta-configs可以帮助我们精确地解析值。我们还可以对其设置Requireddf_val来声明元是必需的还是具有默认值。

源标记文件中的五行meta映射到meta中五个可接受的数据类型,它们是string(str)、boolean(bool)、integer(int)、float(float)和json(json)。

让我们设置元配置并再次解析它

frommetapostimportMetaPostReaderpath="./ExampleMetaPost.md"mtpr=MetaPostReaser()# add_meta_config()# key: str, datatype: str = "str", required: bool = True, df_val: Any = Nonemtpr.add_meta_config("title","str",True)mtpr.add_meta_config("ranking","int",False,0)mtpr.add_meta_config("on_top","bool",False,False)mtpr.add_meta_config("keywords","json",False)mtpr.add_meta_config("work_hours","float",True)result=mtpr.to_dict()print(result)

现在,我们可以获取python格式的文件内容

[{
    "meta":{"title":"Example post",
            "rank":999,
            "on_top":true,
            "keywords":["markdown", "meta", "microblog"],
            "work_hours":35.6,
            ......}
    "html":"<p>......</p>"
}]

如果参数必需的真的而您的文件不包含该元键, 读取器将报告错误。

我们可以比较这三行代码,它们清楚地演示了必需的df_val是如何工作的

frommetapostimportMetaPostReadermtpr=MetaPostReader()# meta required, default value not necessarymtpr.add_meta_config("title","str",True)# meta not required, it is defaulted to be 999 if not providedmtpr.add_meta_config("ranking","int",False,999)# meta not required, no default valuemtpr.add_meta_config("keywords","json",False)

另一件值得一提的事情是metapostreader采用弹性方法解析boolmeta。也就是说,像falsefalsenon0等值将被解析为false,只要元配置需要布尔值。该规则不区分大小写,也适用于true分析。

设置严格模式

我们可以将属性strict_mode设置为metapostreader。默认值为true,这意味着读取器不会分析配置中未定义的元。如果您愿意,请将其设置为false分析尽可能多的有效元。

frommetapostimportMetaPostReadermtpr=MetaPostReader()# strict mode on MetaPostReader().set_strict_mode(True)# strict mode offMetaPostReader().set_strict_mode(False)

默认meta

除了我们在配置中定义的元外,您可以找到一些默认的元。它们是\u content\u markdown\u/code>、\u filepath\uu\u filename\uu\u last\u update\uu。这些文件旨在提供有关源文件的更多信息。

从目录中读取多个文件

metapostreader还可以读取和堆栈多个文件,然后一次将它们全部导出。 所有加载的文件都将存储在metapostreader.mtp_列表中

frommetapostimportMetaPostReader# read three files into MetaPostReadermtpr=MetaPostReader()mtpr.read_file("/mocks/file1.md")mtpr.read_file("/mocks/file2.md")mtpr.read_file("/mocks/file3.md")# now, the length will be 3print(len(mtpr.mtp_list))# parse all the posts, this returns a list of dictionarymy_metas=mtpr.to_dict()# set reset to True if you wish to reset list before readmtpr.read_file("/mocks/file4.md",reset=True)# now, the length will be 1print(len(mtpr.mtp_list))

您还可以读取特定目录下的所有文件。 metapostreader.read_dir()将自动加载扩展名为.md的所有文件。 如果要加载目录树中的所有.md文件,只需将walk设置为true

通过Web开发中的迁移导入模拟数据时,此功能尤其有用。

pip install metapost
0

就这些!如果您有任何建议,请随时通过电子邮件(thittalee@gmail.com)或github与我联系。 下面的api文档提供了所有(预期的)公共方法的简短描述。 快乐编码!

API文件

初始化

  • metapostreader.\uu init(自我)

创建元PostReader

添加元配置

  • .add_meta_cfg(self,key:str,datatype:str="str",必选:bool=true,df_val:any=none)

添加元配置。数据类型可以是strboolintfloatjson

读取方法

  • 。读取目录(self,dirpath:str,reset:bool=false,walk:bool=false)

dirpath下的所有.md文件读入reader。如果要清除以前的加载,请将"重置"设置为"真"。如果要读取目录树中的所有.md文件,请将walk设置为true

  • 。读取文件(self,filepath:str,reset:bool=false)

filepath读取一个文件。如果要清除前一次加载,请将"重置"设置为"真"。

  • 。读取文本(self,source\u text:str,reset:bool=false)

从字符串中读取。如果要清除前一次加载,请将"重置"设置为"真"。

输出方法

  • 。到dict(self)->;列表[dict]

从数据读取导出dict列表。使用dict["meta"]dict["html"]获取值。

  • 。到json(self)->;str

从数据读取中导出一个json字符串。

  • 。到meta(self)->;列表[dict]

从data read.s导出meta的dict列表

  • .to_html(self)->;list[str]

从数据读取中导出HTML字符串列表。

设置方法

  • 。设置严格模式(自我,严格模式:bool)

如果只希望分析配置中定义的元,请将"严格"模式设置为"真"。

  • 。设置降价扩展名(self,扩展名:list)

自定义标记扩展。有关详细信息,请访问markdown

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么使用迭代器。ebean(ORM)模型对象哈希集上的remove()不起作用?   Java日间客户端   需要以java印地语输出编译代码   java如何在Junit4中测试调用私有方法的方法   java CookSwing从文本字段检索字符串   java获取事务中的所有插入ID   stream Java可选如何将一种类型的列表转换为另一种类型   是否需要java Hadoop MapReduce RecordReader实现?   java如何在我的Web应用程序中使用带有路径的xsd模式   java将RTP vp8流保存到webm文件   java Android Studio:无法解析符号“raw”   java如果不使用生成器、静态构造函数或引发异常,如何创建一个包含两个整数的构造函数,而这两个整数永远不相等?   用于Spring安全用户身份验证的java主密码   java REST api返回json但配置为XML?