我正在编写股票代码程序,它会将结果显示在屏幕上并将其写入文件。将结果显示在屏幕上我没有问题,但文件中的结果不是我所期望的。
将结果显示在屏幕上的代码:
tickerList = ticker.split()
quotes = get_stock_quote(tickerList)
for quote in quotes:
print 'ticker: %s' % quote['t'], 'current price: %s' % quote['l_cur'], 'last trade: %s' % quote['lt']
结果(如我所料):
ticker: AAPL current price: 111.31 last trade: Oct 6, 4:00PM EDT
ticker: GOOG current price: 645.44 last trade: Oct 6, 4:00PM EDT
ticker: IBM current price: 148.80 last trade: Oct 6, 6:20PM EDT
要写入文件的代码:
for quote in quotes:
out_quotes = ['ticker: %s ' % quote['t'], 'current price: %s ' % quote['l_cur'], 'last trade: %s ' % quote['lt']]
outfile = open('result.txt', 'w')
for quote in out_quotes:
outfile.writelines(chain(*out_quotes))
outfile.write('\n')
结果:
ticker: IBM current price: 148.80 last trade: Oct 6, 6:20PM EDT
ticker: IBM current price: 148.80 last trade: Oct 6, 6:20PM EDT
ticker: IBM current price: 148.80 last trade: Oct 6, 6:20PM EDT
我期待与屏幕上显示的结果相同的结果。任何人都可以帮我指出我的错误?提前谢谢。
答案 0 :(得分:0)
这是因为out_quotes
变量会被第一个循环的每次迭代覆盖。
你应该在第一个循环之前打开文件并直接在第一个循环中写入文件(并且没有第二个循环)。
答案 1 :(得分:0)
您正在为out_quotes
中的每个quote
修改相同的 quotes
变量。
最简单的方法是在同一个for循环中同时执行print
和write
,如下所示:
for quote in quotes:
print 'ticker: %s' % quote['t'], 'current price: %s' % quote['l_cur'], 'last trade: %s' % quote['lt']
outfile.write(''.join(['ticker: %s ' % quote['t'], 'current price: %s ' % quote['l_cur'], 'last trade: %s ' % quote['lt']]) + '\n')
另外,为简化write
行,您可以将其更改为:
outfile.write('ticker: %s current price: %s last trade: %s\n' % (quote['t'], quote['l_cur'], quote['lt']))