xbrl - 使用 Arelle 获取 XBRL 数据

标签 xbrl arelle

看完了documentation对于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 文档的“事实列表”中获取事实的“属性”。属性包含“名称”数据(或事实的 GAAP 分类法)和“contextRef”,其中包含日期数据“StartDate”、“endDate”和“instant”。

似乎 Arelle 是我最好的选择;但是,cmdline 实用程序似乎并没有为此查询而削减它,而且 api 文档 Here除了源中的文件名之外,它完全是空白的。

任何人都能够解释如何加载 xbrl 文档,加载事实表的事实并将这些事实中的数据和元数据提取到列表中。

下面是一些代码来帮助澄清问题。当我尝试打印我认为包含所有事实和元数据的模型元组时,我得到一个空白列表。这段代码主要是从 CustomLogger.py 复制粘贴的例如在 areelle 包的 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')

关于xbrl - 使用 Arelle 获取 XBRL 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32658710/

相关文章:

python - 如何从html文件中删除所有不必要的标签和符号?

service - 使用 sc create 将带有额外参数的 .exe 作为 Windows 服务运行

python - Arelle 使用 Python 自动化将数据传输到 Excel 的小程序

windows - NSIS RMDir 无法删除 ProgramData 中用户创建的文件

java - XSLT 等同于 XBRL,允许像 XSLT 对 XML 那样对 XBRL 进行转换

javascript - 生成 XBRL 文件的更好方法是什么?

java - 无法使用 Saxon 处理器应用区间算术

java - 无法使用 JAXB 编码 XBRL 实例