用Python格式化表中的文本

2024-09-28 05:18:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我在创建动态表以适应各种结果时遇到问题。在

我写了一个屏幕刮板从http://finance.yahoo.com中提取股票并打印出公司名称、符号和当前股价。在

但是输出如下所示:

 Microsoft Corporation MSFT 29.76

 Apple Inc. AAPL 396.77

 SPDR S&P 500 SPY 155.25

 Google Inc. GOOG 787.76

我希望它看起来像

^{pr2}$

我昨天刚开始使用Python和wo3.1

我目前的代码如下:

import re
import urllib.request
import cgi
from bs4 import BeautifulSoup

price = [0,0,0,0]
namesList = ["string1", "string2", "string3", "string4"]
stocksList = ["msft","aapl","spy","goog"]

def HTML():
    i = 0
    while i < len(stocksList):
        htmlPull = urllib.request.urlopen("http://finance.yahoo.com/q?s="+stocksList[i]+"&ql=1")
        htmlPull = htmlPull.read().decode('utf-8')
        regex = '<span id="yfs_l84_'+stocksList[i]+'">(.+?)</span>'
        pattern = re.compile(regex)
        price[i] = re.findall(pattern,htmlPull)
        htmlParse = BeautifulSoup(htmlPull)
        title = htmlParse.title.contents
        namesList[i] = title        
        i+=1

formatPrice(price)
formatStock(namesList)
formatOutput(namesList, stocksList, price)

def formatPrice(price):
    k=0
    while k < len(price):
        cleaner = str(price[k])
        cleaner = cleaner.replace("[","")
        cleaner = cleaner.replace("]","")
        cleaner = cleaner.replace("'","")
        price[k] = float(cleaner)
        k+=1

def formatStock(namesList):
    k = 0
    while k <len(namesList):
        capital = stocksList[k]
        capital = capital.upper()
        cleaner = str(namesList[k])
        cleaner = cleaner.replace("Summary for ", "")
        cleaner = cleaner.replace(":"," ")
        cleaner = cleaner.replace("- Yahoo! Finance'","")
        cleaner = cleaner.replace("['","")
        cleaner = cleaner.replace("]","")
        cleaner = cleaner.replace(";","")
        cleaner = cleaner.replace(capital, "")
        namesList[k] = cleaner;
        k+=1

    def formatOutput(namesList, stocksList, price):
        i = 0
        while i < len(price):
        capital = stocksList[i]
        capital = capital.upper()
        print(namesList[i],capital, price[i])
        print("")
        i+=1
HTML()

尝试过print({0},{1},{2}.format(namesList,capital,price[i])、各种类型的{<;16}变体等。它似乎只影响一行,我正试图让它从列、表或文本和空白应该填充的空间的角度来考虑。我不知道具体的解决方案是什么,所以我问大家:)

从我的代码可以看出,我对编程还很陌生,所以如果在这段代码中有更好的方法来做任何事情,我很乐意听取更正、建议和建议。在


Tags: 代码importrelentitledefpricereplace
1条回答
网友
1楼 · 发布于 2024-09-28 05:18:59

要根据列中最长的项设置宽度。在

在Python中,使用max来查找某组事物中最大的一个。所以,在循环之外,你可以:

names_width = max(len(name) for name in namesList)
stock_width = max(len(stock) for stock in stockList)

然后,像你说的那样格式化每一行:

^{pr2}$

相关问题 更多 >

    热门问题