使用Arelle获取XBRL数据



在他们的网站上查看了有关arelle的文档后,我找到了答案。要检索所需的数据,可以使用arelleCmdLine导出一个csv文件,使用——factListCols和所需数据类型的字符串(以空格分隔)指定相关数据。不同操作系统调用arelleCmdLine方法不同

CmdL = 'Applications/Arelle.app/contents/MacOS/arelleCmdLine'
os.system('%s --file %s --factListCols "Name Value Period" --facts %s') % (CmdL,xmlPth,csvPth)

我试图在xbrl文档的"factlist"中获得事实的"属性"。属性保存"name"数据(或事实的GAAP分类法),"contextRef"保存日期数据"StartDate"、"endDate"one_answers"instant"。

看起来Arelle是我最好的选择;然而,cmdline实用程序似乎不能解决这个问题,并且api文档这里除了源代码中的文件名外完全是空白的。

有人能解释一下如何加载xbrl文档,加载事实表的事实,并从这些事实中提取数据和元数据到列表中吗?

下面是一段有助于澄清问题的代码。当我试图打印我认为包含所有事实和元数据的modeltuplefacts时,我得到一个空白列表。这段代码主要是从CustomLogger.py(例如,在arelle包的arelle文件夹中)复制粘贴过来的。我不确定日志记录器是如何工作的,但它是必需的,这个例子似乎满足了Cntlr对它的要求。

from __future__ import print_function
import sys
sys.path.insert(0, '~/Desktop/Arelle')
from arelle import Cntlr
from arelle import ModelDocument
from arelle import ModelObject as MO
from arelle import ModelInstanceObject as MIO
class CntlrCustomLoggingExample(Cntlr.Cntlr):
    def __init__(self):
        # no logFileName parameter to prevent default logger from starting
        super().__init__()
    def run(self):
        # start custom logger
        CustomLogHandler(self)
        path = "~/Desktop/SEC/SECindexes10-k/fileHolder/1/nick-20150630.xml"
        modelXbrl = self.modelManager.load(path)
        modelDoc = ModelDocument.load(modelXbrl,path)
        mf = MIO.ModelFact()
        mf.init(modelDoc)
        print(mf.modelTupleFacts)
        self.modelManager.close()
        self.close()
import logging
class CustomLogHandler(logging.Handler):
    def __init__(self, cntlr):
        logger = logging.getLogger("arelle")
        self.level = logging.DEBUG
        self.setFormatter(logging.Formatter("[%(messageCode)s] %(message)s - %(file)s %(sourceLine)s"))
        logger.addHandler(self)
    def emit(self, logRecord):
        # just print to standard output (e.g., terminal window)
        print(self.format(logRecord))
if __name__ == "__main__":
    CntlrCustomLoggingExample().run()

最简单的答案是将事实从XBRL转换为。csv,然后在Python中使用。csv文件搜索合适的位置。下面是转换为.csv的简单代码:

from arelle import ViewFileFactTable, ModelManager, FileSource, Cntlr, ModelXbrl, ModelDocument
    modelManager = ModelManager.initialize(Cntlr.Cntlr())
    filesource = FileSource.FileSource('C:/XXX/testowy2.xhtml')
    xbrl=ModelXbrl.load(modelManager,'C:/XXX/testowy2.xhtml')
    ViewFileFactTable.viewFacts(xbrl, 'C:/XXX/testowy22.csv')

相关内容

  • 没有找到相关文章

最新更新