已经支持的包括:
- 独立的文本文件
- PEP (Python Enhancement Proposals)
将会被支持的包括:
- Python模块或者包中的内联文档
- 电子邮件(RFC822格式的邮件头、引用、签名和MIME 段)
- Wiki格式
- 混合的文档,例如将多个的章节合并到一本书中
- 所发现的其他文件格式
使用 pip 安装:
# pip install docutils
在 Debian / Ubuntu 下安装:
sudo apt install -y python3-docutils
如果已经有了一个 .rst
文档,可以使用以下内容来生成 example.rst
的HTML文档:
cd <archive_directory_path>/tools
rst2html example.rst example.html
可以使用buildhtml.py
将目录下的所有.txt
文件转换成.html
文件,
该操作也将包含其下的子目录。使用方法如下:
buildhtml.py [options] [<directory> ...]
rst2html.py
通过使用rst2html.py
可以将单独的reStructuredText文本文件转换成HTML文件,
适用于当前流行的浏览器,并支持CSS。
rst2html.py test.txt test.html
rstpep2html.py
通过使用rstpep2html.py
可以将新的用reStructuredText格式编写的PEP转换成HTML。
rstpep2html.py pep-0287.txt pep-0287.html
rst2s5.py
使用rst2s5.py
可以将单独的reStructuredText文本文件转换成符合 S5 规范的(X)HTML文件。
rst2s5.py slides.txt slides.html
rst2latex.py
通过使用rst2latex.py
可以将单独的reStructuredText文本文件转换成LaTeX2e。
rst2latex.py test.txt test.tex
rst2xml.py
通过使用rst2xml.py
可以将单独的reStructuredText文本文件转换成XML文件。
这是标准的XML文件。
首先导入所需模块:
import docutils.parsers.rst
import docutils.frontend
--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) Cell In[16], line 1 ----> 1 import docutils.parsers.rst 2 import docutils.frontend ModuleNotFoundError: No module named 'docutils'
- 可以传递几个可选参数来修改解析器的行为。有关详细信息,请参阅下面的自定义
Parser_
。 - 通过读取文件或标准输入来收集输入(多行字符串):
- 创建一个新的
docutils.nodes.document
:
创建解析器:
parser = docutils.parsers.rst.Parser()
settings = docutils.frontend.get_default_settings(docutils.parsers.rst.Parser)
创建文档对象,以接收解析结果:
document = docutils.utils.new_document('<rst-doc>', settings)
运行解析器,填充文档:
parser.parse('Called for "reference" nodes.', document)
import docutils.parsers.rst
import docutils.utils
import docutils.frontend
def parse_rst(text: str) -> docutils.nodes.document:
parser = docutils.parsers.rst.Parser()
if hasattr(docutils.frontend, 'get_default_settings'):
# docutils >= 0.18
settings = docutils.frontend.get_default_settings(docutils.parsers.rst.Parser)
else:
# docutils < 0.18
settings = docutils.frontend.OptionParser(components=(docutils.parsers.rst.Parser,)).get_default_values()
document = docutils.utils.new_document('<rst-doc>', settings=settings)
parser.parse(text, document)
return document
import docutils.parsers.rst
import docutils.utils
import docutils.frontend
def parse_rst(text: str) -> docutils.nodes.document:
parser = docutils.parsers.rst.Parser()
if hasattr(docutils.frontend, 'get_default_settings'):
# docutils >= 0.18
settings = docutils.frontend.get_default_settings(docutils.parsers.rst.Parser)
else:
# docutils < 0.18
settings = docutils.frontend.OptionParser(components=(docutils.parsers.rst.Parser,)).get_default_values()
document = docutils.utils.new_document('<rst-doc>', settings=settings)
parser.parse(text, document)
return document
--------------------------------------------------------------------------- NameError Traceback (most recent call last) Cell In[17], line 1 ----> 1 def parse_rst(text: str) -> docutils.nodes.document: 2 parser = docutils.parsers.rst.Parser() 3 if hasattr(docutils.frontend, 'get_default_settings'): 4 # docutils >= 0.18 NameError: name 'docutils' is not defined
class MyVisitor(docutils.nodes.NodeVisitor):
def visit_reference(self, node: docutils.nodes.reference) -> None:
"""Called for "reference" nodes."""
print(node)
def unknown_visit(self, node: docutils.nodes.Node) -> None:
"""Called for all other node types."""
pass
doc = parse_rst('spam spam lovely spam')
visitor = MyVisitor(doc)
doc.walk(visitor)
from docutils.core import publish_doctree
source = 'Hello *world*'
tree = publish_doctree(source)
tree
for x in tree:
print(x)
创建一个临时的rst文件
content='''
#测试
##测试1
###测试2
####测试4
'''
with open('xx_test.rst', 'w', encoding='utf-8') as f:
f.write(content)
print("已生成测试RST文件xx_test.rst")
from docutils import frontend, utils
from docutils.parsers.rst import Parser
settings = frontend.get_default_settings(Parser)
with open('test.rst', encoding='utf-8') as file:
document = utils.new_document(file.name, settings)
Parser().parse(file.read(), document)
print(document.pformat())
type(document)
dir(document)
document.attlist()
document.attributes
document.next_node()
document.next_node()
for x in document:
print(x)
document.next_node()
document.children[2].pformat()
para = document.children[2]
titletext = 'Hello, Sphinx!'
para += docutils.nodes.Text(titletext, titletext)
type(para)
para
for x in para:
print(x)
para[0]
para[1]
document.children[2]
vv = docutils.nodes.paragraph('afds')
type(vv)