2013-07-26 23 views
0

我試圖在setup.py解析reStructuredText的README.rst得到說明部分

在我setup.py我有一個自述功能的包裝說明從我README.rst再用信息:

def readme(): 
    try: 
     with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f: 
      return f.read() 
    except (IOError, OSError): 
     return '' 

我在

setup(
    ... 
    long_description=readme(), 
    ... 
) 

叫因爲我reStructuredText是一個相當龐大的README.rst它可能是一個更好的辦法只是只讀restr的特定部分製作文字。

是否有一種巧妙的方式來重寫readme(),以便解析README.rst並忽略reStructuredText格式的其餘部分,即僅給出小部分的純文本?

+0

展望新結構化分析現在..如果我將我想通不會 - 將發佈答案。 –

+0

嘗試[DocUtils](http://docutils.sourceforge.net/docs/dev/hacking.html#parsing-the-document)。這是斯芬克斯使用的rST解析器。 – refi64

回答

1

我想你可以使用docutils的這一部分:

「解析文檔

解析器分析輸入文檔並創建一個節點樹 表示在這種情況下,我們使用的是reStructuredText解析器 (docutils/parsers/rst/init .py)。要查看該節點樹看起來像什麼 ,我們將quicktest.py(可在Docutils發行版的工具/目錄 中找到)與我們示例fil E(的test.txt)作爲 第一個參數(Windows用戶可能需要輸入python quicktest.py 的test.txt):

$ quicktest.py的test.txt 我 喜歡 語言是 的Python 。 讓我們來看看節點樹:

頂層節點是文檔。它有一個源屬性,其值 是text.txt。有兩個孩子:一個段落節點和一個目標節點 。該段依次具有子節點:文本節點(「我的」),重點節點 ,文本節點(「語言是」),參考節點,以及文本節點(「。」)。

這些節點類型(文檔,段落,重點等)都在docutils/nodes.py中定義爲 。節點類型在內部排列爲 類層次結構(例如,強調和引用都具有內聯公共超類 )。要獲得節點類 層次結構的概述,請使用epydoc(類型epydoc nodes.py)並查看類 層次結構樹。「 - http://docutils.sourceforge.net/docs/dev/hacking.html

找到你需要的總文檔的:)節點,然後只寫相關節點

0

我結束了這一點,這是不完美的,但這項工作:

def readme(): 
    try: 
     import docutils 
    except ImportError: 
     try: 
      with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f: 
       return f.read() 
     except (IOError, OSError): 
      return '' 
    with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f: 
     document = docutils.core.publish_doctree(f.read()) 
     nodes = list(document) 
     description = '' 
     for node in nodes: 
      if str(node).startswith('<topic classes="contents"'): 
       break 
      if type(node) is docutils.nodes.comment\ 
      or type(node) is docutils.nodes.title: 
       continue 
      description += node.astext() + '\n' 
     return return description.encode('ascii', 'ignore').strip() 

我會想象一個可以行走將RST文檔樹做一個更好的和複雜的分析。