-
Notifications
You must be signed in to change notification settings - Fork 0
/
xbrl_view_facts.py
67 lines (53 loc) · 1.96 KB
/
xbrl_view_facts.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""
Arelleを使ったサンプルコード3
XBRL形式のデータを階層構造で出力する
"""
import glob
import os
import re
import sys
import pandas as pd
from arelle import Cntlr, ModelManager, ViewFileFactTable
from utils import extract_files_from_zip
# パス関連
EDINET_ROOT_DIR = "D:\\EDINET\\120_yuho_test"
EDINET_XBRL_REGREX = "*\\XBRL\\PublicDoc\\*.xbrl"
OUTPUT_FILE_NAME = "yuho_viewFacts_{fname}.csv"
# 取得対象のリンクロール
#TGT_LINK_ROLE = None #リンクロール指定しない
TGT_LINK_ROLE = "http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_BusinessResultsOfReportingCompany"
# EDINETからダウンロードしたXBRLを含むzipファイルが解凍済かどうか
IS_EXTRACTED = True
def export_facts(model_manager, xbrl_file):
"""XBRLデータを階層構造で出力する"""
model_xbrl = model_manager.load(xbrl_file)
filename = re.search(r'E\d+', os.path.split(xbrl_file)[1]).group()
ViewFileFactTable.viewFacts(
model_xbrl,
os.path.join(EDINET_ROOT_DIR, OUTPUT_FILE_NAME.format(fname=filename)),
linkrole=TGT_LINK_ROLE
)
model_manager.close()
def main():
if IS_EXTRACTED:
pass
else:
edinet_zip_dir = os.path.join(EDINET_ROOT_DIR, "zip")
extract_files_from_zip(
edinet_zip_dir,
dest_dir_root=EDINET_ROOT_DIR,
unzip_members_regrep="|".join(
[f"XBRL/PublicDoc/.*\.{extension}" for extension in ["xbrl", "xsd", "xml"]]
)
)
# XBRLから情報取得
xbrl_file_regrex = os.path.join(EDINET_ROOT_DIR, EDINET_XBRL_REGREX)
xbrl_files = glob.glob(xbrl_file_regrex)
ctrl = Cntlr.Cntlr()
model_manager = ModelManager.initialize(ctrl)
for index, xbrl_file in enumerate(xbrl_files):
print(xbrl_file, ":", index + 1, "/", len(xbrl_files))
export_facts(model_manager, xbrl_file)
print(f"{'-'*10} XBRL出力 完了 {'-'*10}")
if __name__ == "__main__":
main()