Есть ли в любом случае стиль <td>элементов на основе условного использования PrettyTable - PullRequest
0 голосов
/ 05 февраля 2019

Вот код:

from prettytable import PrettyTable
import requests

def market_table():
    api = "https://api.coinmarketcap.com/v2/ticker/"
    raw_data = requests.get(api).json()
    data = raw_data['data']

    table = PrettyTable()

    for currency in data:
        name = data[currency]['name']
        market_cap = data[currency]['quotes']['USD']['market_cap']
        price = data[currency]['quotes']['USD']['price']
        change_1h = data[currency]['quotes']['USD']['percent_change_1h']
        change_24h = data[currency]['quotes']['USD']['percent_change_24h']
        change_7d = data[currency]['quotes']['USD']['percent_change_7d']

        table.add_row([name,market_cap,price,change_1h,change_24h,change_7d])

    table.field_names = ["Name","Market Cap","Price","Change 1h","Change 24h","Change 7d"]
    table.sortby = "Market Cap"
    table.reversesort = True
    market_table = table.get_html_string()
    return market_table

То, что я хочу сделать, это изменить стиль change_1h, change_24h и change_7d на красный, если изменение <0, и зеленый, если изменение> 0.Возможно ли это с помощью PrettyTable?

1 Ответ

0 голосов
/ 05 февраля 2019

Изменение цвета невозможно с PrettyPrint, но вы можете применить свою собственную постобработку:

import re
import requests
from prettytable import PrettyTable

def market_table():
    changes = []
    data = requests.get('https://api.coinmarketcap.com/v2/ticker').json()['data']
    table = PrettyTable(['Name', 'Market Cap', 'Price', 'Change 1h', 'Change 24h', 'Change 7d'], sortby='Market Cap', reversesort=True)
    for currency in data:
        change_1h = data[currency]['quotes']['USD']['percent_change_1h']
        change_24h = data[currency]['quotes']['USD']['percent_change_24h']
        change_7d = data[currency]['quotes']['USD']['percent_change_7d']
        changes.extend([change_1h, change_24h, change_7d])
        table.add_row([data[currency]['name'], data[currency]['quotes']['USD']['market_cap'],
                       data[currency]['quotes']['USD']['price'], change_1h, change_24h, change_7d])
    html = table.get_html_string()
    for change in changes:
        color = '#00FF00' if change > 0 else '#FF0000'
        html = re.sub('<td>{}</td>'.format(change), '<td bgcolor="{}">{}</td>'.format(color, change), html)
    return html

Вот что вы получите:

enter image description here

...