我正在从 xbrl 解析值。我的代码基于 python-xbrl 包,但为了满足我的需要对其进行了一些更改。该包使用beautifulsoup4
我正在使用下面的代码来查找我感兴趣的一个值。我使用if
语句是因为不同的公司对同一事物使用不同的标签名称。
例如 AAPL 使用us-gaap:CostOfGoodsAndServicesSold
,而 ADBE 使用us-gaap:CostOfRevenue
。
此代码按预期工作,给了我正确的值 29924000000
#COST_GOOD_SOLD
COST_GOOD_SOLD = xbrl.find_all(name=re.compile("(us-gaap:CostOfGoodsAndServicesSold$)",
re.IGNORECASE | re.MULTILINE))
gaap_obj.COST_GOOD_SOLD = self.data_processing(COST_GOOD_SOLD, xbrl, ignore_errors,
logger, context_ids)
if gaap_obj.COST_GOOD_SOLD ==0 or gaap_obj.COST_GOOD_SOLD==None:
COST_GOOD_SOLD = xbrl.find_all(name=re.compile("(us-gaap:CostOfRevenue$)",
re.IGNORECASE | re.MULTILINE))
gaap_obj.COST_GOOD_SOLD = self.data_processing(COST_GOOD_SOLD, xbrl, ignore_errors,
logger, context_ids)
XBRL
<us-gaap:CostOfGoodsAndServicesSold contextRef="eol_PE2035----1510-Q0008_STD_91_20150627_0" unitRef="iso4217_USD" decimals="-6" id="id_5025426_2D2AD7F5-3575-48A0-9F08-7F1EBE173C23_1_1">29924000000</us-gaap:CostOfGoodsAndServicesSold>
此代码返回零,而我想要 -1808000000
#NET_CURR_DEBT
NET_CURR_DEBT = xbrl.find_all(name = re.compile("(us-gaap:ProceedsFromRepaymentsOfCommercialPaper$)",
re.IGNORECASE | re.MULTILINE))
gaap_obj.NET_CURR_DEBT = self.data_processing(NET_CURR_DEBT, xbrl, ignore_errors,
logger, context_ids)
if NET_CURR_DEBT==0 or NET_CURR_DEBT==None:
NET_CURR_DEBT = xbrl.find_all(name = re.compile("(us-gaap:RepaymentsOfLongTermDebtAndCapitalSecurities$)",
re.IGNORECASE | re.MULTILINE))
gaap_obj.NET_CURR_DEBT = self.data_processing(NET_CURR_DEBT, xbrl, ignore_errors,
logger, context_ids)
XBRL
<us-gaap:ProceedsFromRepaymentsOfCommercialPaper contextRef="eol_PE2035----1510-Q0008_STD_273_20150627_0" unitRef="iso4217_USD" decimals="-6" id="id_5025426_049B4F11-216C-4D4B-A41F-32F1F55F967F_1_32">-1808000000</us-gaap:ProceedsFromRepaymentsOfCommercialPaper>
我还有其他几个要解析的值,但它们都具有与我附加的代码相同的结构。我的输出是一个数据框,其中第一列是值名称(COST_GOOD_SOLD, NET_CURR_DEBT, ect)
,第二列是XML
文件中的值。
我无法弄清楚为什么相同的代码块不起作用。看来我在这两种情况下都在做同样的事情。找到一个值并存储它。