2017-05-09 72 views
1

我正在爲一個CSV文件(正在工作)寫入一個函數,但是它在最後一行中的一半被切斷。我知道這可能與關閉文件有關,但我認爲我做得正確。Python - CSV寫入 - 切斷最後一行

任何可能出錯的建議?

from itertools import combinations as cb 
import csv 
import numpy as np 


with open("usableReviewScores.csv") as f: 
    reader=csv.reader(f) 
    next(reader, None) # skip header 
    data=[filter(None,i) for i in reader] 

writer = csv.writer(open("alexData1.csv", 'wb')) 

def avgg(x): 
    ll=[float(i) for i in x[1:]] #take review no and convert to float 
    n=len(ll) 
    avg_list=[x[0]] #start result list with ref no. 
    final_list=[] 
    a = 0 
    b = [] 
    c = [] 
    d = [] 

    global min_val 
    global max_val 
    min_val = 0 
    max_val = 0 

    for i in range(4,5): 
     for j in cb(ll,i): 
      # print(j) 
      c = i 
      avg_list.append(sum(j)/i) 
      final_list.append(sum(j)/i) 
      a = sum(final_list)/len(final_list) 
      min_val = min(final_list) 
      max_val = max(final_list) 
      d = np.std(final_list) 

    return (avg_list, "avg", a, "min", min_val, "max", max_val, 
     "Num of reviews", c, "std", d, "Total Reviews", n) 

for x in data: 
    print(avgg(x)) 

for x in data: 
    writer.writerow(avgg(x)) 
+1

您顯示的代碼似乎存在縮進問題。特別是在「與...打開...作爲f:」行 – apomene

+0

哦,對不起,那是我試圖讓網站接受它作爲代碼。讓我編輯它以顯示它在我的工具上是什麼 – ScoutEU

+0

好的,編輯代碼以匹配格式 – ScoutEU

回答

2

你說這可能是關閉文件。那麼你實際上並沒有關閉你的輸出文件在所有。所以我猜,這是文件系統緩存的症狀和緩存沒有被正確地刷新,因爲文件沒有關閉

您應該使用with open(filename) as handle:的寫作,以及您的輸入:

with open("alexData1.csv", 'wb') as outfile: 
    writer = csv.writer(outfile) 
    for x in data: 
     writer.writerow(avgg(x)) 
+0

完美,謝謝。我已經測試過它,它的工作原理! :) – ScoutEU