Разбор вывода данных в Python - PullRequest
0 голосов
/ 04 декабря 2018

Итак, у меня есть этот код:

si.get_stats("aapl")

, который возвращает этот мусор:

0                          Market Cap (intraday) 5       877.04B
1                               Enterprise Value 3       966.56B
2                                     Trailing P/E         15.52
3                                    Forward P/E 1         12.46
4                      PEG Ratio (5 yr expected) 1          1.03
5                                Price/Sales (ttm)          3.30
6                                 Price/Book (mrq)          8.20
7                       Enterprise Value/Revenue 3          3.64
8                        Enterprise Value/EBITDA 6         11.82
9                                 Fiscal Year Ends  Sep 29, 2018
10                       Most Recent Quarter (mrq)  Sep 29, 2018
11                                   Profit Margin        22.41%
12                          Operating Margin (ttm)        26.69%
13                          Return on Assets (ttm)        11.96%
14                          Return on Equity (ttm)        49.36%
15                                   Revenue (ttm)       265.59B
16                         Revenue Per Share (ttm)         53.60
17                  Quarterly Revenue Growth (yoy)        19.60%
18                              Gross Profit (ttm)       101.84B
19                                          EBITDA         81.8B
20                  Net Income Avi to Common (ttm)        59.53B
21                               Diluted EPS (ttm)         11.91
22                 Quarterly Earnings Growth (yoy)        31.80%
23                                Total Cash (mrq)         66.3B
24                      Total Cash Per Share (mrq)         13.97
25                                Total Debt (mrq)       114.48B
26                         Total Debt/Equity (mrq)        106.85
27                             Current Ratio (mrq)          1.12
28                      Book Value Per Share (mrq)         22.53
29                       Operating Cash Flow (ttm)        77.43B
30                    Levered Free Cash Flow (ttm)        48.42B
31                               Beta (3Y Monthly)          1.21
32                                52-Week Change 3         5.27%
33                         S&P500 52-Week Change 3         4.97%
34                                  52 Week High 3        233.47
35                                   52 Week Low 3        150.24
36                         50-Day Moving Average 3        201.02
37                        200-Day Moving Average 3        203.28
38                             Avg Vol (3 month) 3         38.6M
39                              Avg Vol (10 day) 3        42.36M
40                            Shares Outstanding 5         4.75B
41                                           Float         4.62B
42                            % Held by Insiders 1         0.07%
43                        % Held by Institutions 1        61.16%
44                   Shares Short (Oct 31, 2018) 4        36.47M
45                    Short Ratio (Oct 31, 2018) 4          1.06
46               Short % of Float (Oct 31, 2018) 4         0.72%
47  Short % of Shares Outstanding (Oct 31, 2018) 4         0.77%
48       Shares Short (prior month Sep 28, 2018) 4         40.2M
49                  Forward Annual Dividend Rate 4          2.92
50                 Forward Annual Dividend Yield 4         1.51%
51                 Trailing Annual Dividend Rate 3          2.72
52                Trailing Annual Dividend Yield 3         1.52%
53                 5 Year Average Dividend Yield 4          1.73
54                                  Payout Ratio 4        22.84%
55                                 Dividend Date 3  Nov 15, 2018
56                              Ex-Dividend Date 4   Nov 8, 2018
57               Last Split Factor (new per old) 2           1/7
58                               Last Split Date 3   Jun 9, 2014

Это сторонняя функция, которая удаляет данные из Yahoo Finance.Мне нужно что-то вроде этого

def func( si.get_stats("aapl") ):
     **magic**
     return Beta (3Y Monthly)

В частности, я хочу, чтобы он возвращал число, связанное с бета-версией, а не фактический текст.

1 Ответ

0 голосов
/ 04 декабря 2018

Я предполагаю, что вызов функции возвращает одну строку или список строк для каждой строки в таблице и не записывает в стандартный вывод.

Чтобы получить значение, связанное с бета-версией (3Y в месяц)или любое другое имя параметра:

1) Если возвращаемое значение представляет собой одну строку с форматированием для печати в виде таблицы выше, она должна иметь \ n в конце каждой строки.Таким образом, вы можете разделить эту строку на список, затем выполнить итерацию, чтобы найти имя параметра, и снова разделить, чтобы получить числовое значение, связанное с ним

# Split the single formatted string to a list of elements, each element
# is one line in the table
str_lst = si.get_stats("aapl").split('\n')
for line in str_lst:
    # change Beta (3Y Monthly) to any other parameter required.
    if 'Beta (3Y Monthly)' in line:
        # split this line with the default split value of white space
        # this should provide a list of elements split at each white space.
        # eg : ['31', 'Beta', '(3Y', 'Monthly)', '1.21'], the numeric value is the
        # last element. Strip to remove trailing space/newline.
        num_value_asStr = line.split()[-1].strip()
return num_value_asStr 

2) Если это уже список, который возвращается, просто выполните итерациюэлементы списка и используйте условие if, как указано выше, и разбейте требуемый элемент списка, чтобы получить числовое значение, связанное с параметром.

str_lst = si.get_stats("aapl")
for line in str_lst:
    # change Beta (3Y Monthly) to any other parameter required.
    if 'Beta (3Y Monthly)' in line:
        # split this line with the default split value of white space
        # this should provide a list of elements split at each white space.
        # eg : ['31', 'Beta', '(3Y', 'Monthly)', '1.21'], the numeric value is the
        # last element. Strip to remove trailing space/newline.
        num_value_asStr = line.split()[-1].strip()
return num_value_asStr 
...