在他们的网站上查看了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文档的“factlist”中获取事实的“属性”。这些属性包含“名称”数据(或事实的GAAP分类法)和“contextRef”,其中包含日期数据“StartDate”,“endDate”和“instant”。
似乎Arelle是我最好的选择;但是,cmdline实用程序似乎没有为此查询删除它,并且api文档Here完全空白,除了源代码中的文件名。
是否有人能够解释如何加载xbrl文档,加载事实表的事实,并将这些事实中的数据和元数据提取到列表中。
以下是一些有助于澄清问题的代码。当我尝试打印我相信拥有所有事实和元数据的modeltuplefacts时,我得到一个空白列表。此代码主要是来自arelle包的arelle文件夹中的CustomLogger.py的复制和粘贴。我不确定记录器如何工作,但它需要和这个例子似乎满足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()
答案 0 :(得分:0)
最简单的答案是将事实从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')