解释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可以帮助我们精确地解析值。我们还可以对其设置Required
和df_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
采用弹性方法解析bool
meta。也就是说,像false
、false
、no
、n
、0
等值将被解析为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)
添加元配置。数据类型
可以是str
,bool
,int
,float
和json
读取方法
。读取目录(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。