Python - 将多个列表写入文件

时间:2015-10-08 01:00:48

标签: python list

我正在编写股票代码程序,它会将结果显示在屏幕上并将其写入文件。将结果显示在屏幕上我没有问题,但文件中的结果不是我所期望的。

将结果显示在屏幕上的代码:

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 

我期待与屏幕上显示的结果相同的结果。任何人都可以帮我指出我的错误?提前谢谢。

2 个答案:

答案 0 :(得分:0)

这是因为out_quotes变量会被第一个循环的每次迭代覆盖。

你应该在第一个循环之前打开文件并直接在第一个循环中写入文件(并且没有第二个循环)。

答案 1 :(得分:0)

您正在为out_quotes中的每个quote修改相同的 quotes变量。

最简单的方法是在同一个for循环中同时执行printwrite,如下所示:

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']))