如何在字符串格式中将所有参数转换为字符串

时间:2011-10-14 14:50:55

标签: python string urllib2

从Corey Goldberg开始:

#!/usr/bin/env python

import json
import pprint
import urllib2


def get_stock_quote(ticker_symbol):   
    url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol
    lines = urllib2.urlopen(url).read().splitlines()
    return json.loads(''.join([x for x in lines if x not in ('// [', ']')]))


if __name__ == '__main__':
    quote = get_stock_quote('IBM')
    print 'ticker: %s' % quote['t']
    print 'current price: %s' % quote['l_cur']
    print 'last trade: %s' % quote['lt']
    print 'full quote:'
    pprint.pprint(quote)

使用此:

import urllib2, json

def get_stock_quote(ticker_symbol):   
    url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol
    lines = urllib2.urlopen(url).read().splitlines()
    #print lines
    return json.loads(''.join([x for x in lines if x not in ('// [', ']')]))



if __name__ == '__main__':
    symbols = ('Goog',) 
    symbols2 = ('Goog','MSFT')
    quote = get_stock_quote(symbols)
    print 'ticker: %s' % quote['t'],  'current price: %s' % quote['l_cur'], 'last trade: %s' % quote['ltt']
    print quote['t'],  quote['l'], quote['ltt']

使用符号有效,符号2不起作用。错误消息是

TypeError:并非在字符串格式化期间转换所有参数

如何在字符串格式中将所有参数转换为字符串。在浏览器中,有效的代码是:Goog,MSFT。

编辑:我正在寻找的输出是一个带有goog,msft信息的列表。

4 个答案:

答案 0 :(得分:2)

您的问题是%s无法处理包含2个元素的元组,请参阅下面的示例:

>>> "=%s" % ('Goog',)
'=Goog'
>>> "=%s" % ('Goog','MSFT')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

无论如何,请使用format()代替%

答案 1 :(得分:1)

在这种情况下,你可以:

import urllib2, json

def get_stock_quote(ticker_symbol):
    if isinstance(ticker_symbol, (list, tuple)):
        ticker_symbol = ','.join(ticker_symbol)
    url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol
    lines = urllib2.urlopen(url).read().splitlines()
    #print lines
    return json.loads('[%s]' % ''.join([x for x in lines if x not in ('// [', ']')]))

if __name__ == '__main__':
    symbols = ('Goog',) 
    symbols2 = ('Goog','MSFT')
    quotes = get_stock_quote(symbols2)
    for quote in quotes:
        print 'ticker: %s' % quote['t'],  'current price: %s' % quote['l_cur'], 'last trade: %s' % quote['ltt']
        print quote['t'],  quote['l'], quote['ltt']

答案 2 :(得分:0)

您收到此错误,因为格式化只需要一个字符串,而您将元组放入2个字符串。如果你想获得http://finance.google.com/finance/info?q=Goog,MSFT,你应该做

quote = get_stock_quote(",".join(['Goog','MSFT']))

或者在周期中这样做:

for symbol in ('Goog', 'MSFT'):
    quote = get_stock_quote(symbol)

答案 3 :(得分:0)

问题在于:

url = 'http://finance.google.com/finance/info?q=%s' % ticker_symbol

使用symbols2,您将提供2元组,而格式化运算符需要标量或1元组。

以下内容将解决即时错误:

url = 'http://finance.google.com/finance/info?q=%s' % ",".join(ticker_symbol)

这只解决了问题的一半:解析结果的代码也需要更改。我将此作为练习留给读者。