2014-11-14 198 views
-3

我正在讀取CSV文件,編輯其中的一些值,並嘗試寫入CSV文件。但是,當我嘗試執行它說imgur鏈接中的東西。我不確定它爲什麼這樣做。不知道如何解決此錯誤

http://imgur.com/akXeouk

這裏是將Excel/CSV文件:

https://onedrive.live.com/redir?resid=45E225BF1E0ACB4%21606

import csv 

f = open('project survey.csv') 

csv_f = csv.reader(f) 

def encoder(x): 

    for row in csv_f: 
     if row[2] == "2018": 
      row[2] = 1.0 
     elif row[2] == "2017": 
      row[2] = 2.0 
     elif row[2] == "2016": 
      row[2] = 3.0 

     print (row)   
    return row 


new_data = [] 
for row in encoder(csv_f): 
    new_data.append(row) 

print (new_data) 

f = open('new_data.csv','wb') 

output = csv.writer(f) 

for row in new_data: 

    output.writerow([row]) 
+0

請問您可以追溯到這個問題?也給'print(row)'輸出' – Nilesh

+0

你的編碼器函數不返回任何東西。因此,'new_data'是一個包含單個元素的列表,'None'。打印時應注意。如果你不使用它,爲什麼你的編碼器函數有一個參數? – Carsten

+0

@Carsten我用「return」替換了「print」,並從編碼器(x)中刪除了參數,並將整個輸出更改爲:http://imgur.com/FAwVcqk –

回答

0

writerow是用於寫入的序列(列表或元組),以不是文件單可變。 您已將單個值'row'作爲writerow的參數,實際上應該是一個序列。

嘗試

for row in new_data: 
    output.writerow([row]) 

output.writerow(new_data) 
+0

這真的很有趣,但嘗試兩種,我得到http://imgur.com/TFPuCag,xYsEvAt http://imgur.com/TFPuCag,xYsEvAt#1 –

+0

@JohnChen問題我相信是因爲你的函數返回None而不是返回行。打印(行)後添加返回行。 – Mithu

+0

當我添加一個返回行時,它給了我這個http://imgur.com/ZaMY8Ka,這很奇怪,因爲我不明白爲什麼它只會給我一個縮短的輸出 –

-1

與所有的你的幫助,我終於想通了,如何解決這個問題。

這是新代碼:

import csv 
f = open('project survey.csv') 
csv_f = csv.reader(f) 

new_data = [] 

def encoder(x): 
    for row in csv_f: 
     if row[24] == "Other": 
      row[24] = 1.0 
     elif row[24] != "Other": 
      row[24] = 0 
     new_data.append(row) 
    return new_data 

encoder(csv_f) 
print(new_data) 

f = open('new_data.csv','wt') 
output = csv.writer(f) 

for row in new_data: 
    output.writerow(row) 

f.close() 

爲了回報,而不是打印,我不得不創建一個新的空單追加一切。

起初它並沒有寫入new_data.csv,因爲python 3需要你指定編碼。幸運的是,只需將「wt」放在「new_data.csv」旁邊即可保存爲文本而不是二進制文件。

非常感謝大家,這已經是真正的教育。

相關問題