2015-11-29 56 views
1

我有一些麻煩與此表:雙列表,並導出爲CSV

import csv 

with open('chill.csv','wb') as f: 
    writer = csv.writer(f) 
for s in range(0,70,5): 
    for t in range(-25,10,5): 
     print 13.127 + 0.6215*t-11.362*s**0.16+0.396*t*s**0.16, '\t', 
    print 
writer.writerow([13.127 + 0.6215*t-11.362*s**0.16+0.396*t*s**0.16]) 

的問題是,行和列(st)的輸入直接拿去加工成print聲明,但我需要在行和列中顯示這些結果從中得出的值。此外,我試圖使用常用命令將表導出爲.csv文件,但是Python給了我一個運行時錯誤: ValueError: I/O operation on closed file。我如何解決這兩個問題?

順便說一句,我正在與Python 2.7。

回答

3

你的代碼需要 with塊:

with open('chill.csv','wb') as f: 
    writer = csv.writer(f) 
    for s in range(0,70,5): 
     for t in range(-25,10,5): 
      print 13.127 + 0.6215*t-11.362*s**0.16+0.396*t*s**0.16, '\t', 
     print 
    writer.writerow([13.127 + 0.6215*t-11.362*s**0.16+0.396*t*s**0.16]) 

一旦你離開with聲明文件被關閉,以便writer.writerow是要失敗,你看到錯誤的身體。

如果你想在一排並打印所有數據:

with open('chill.csv', 'wb') as f: 
    import csv 
    wr = csv.writer(f) 
    data = ([str(13.127 + 0.6215 * t - 11.362 * s ** 0.16 + 0.396 * t * s ** 0.16) 
       for t in range(-25, 10, 5)] 
        for s in range(0, 70, 5)) 
    for row in data: 
     print("\t".join(row)) 
     wr.writerow(row) 
+0

謝謝,它的工作原理!但是,我如何在行和列上,在shell和CSV上顯示初始值? – james42

+0

如果您希望打印到屏幕並寫入csv,只需在您打印的任何位置添加一個編輯器,或者您正在討論文件中的內容? –

+0

我檢查了這個文件...使用上面的代碼只在第一個單元格中存儲最後的計算值,所以我把'writer.writerow'放在'for'循環中,但現在打印整個表格在單個列中... – james42