2017-05-30 45 views
0

我很新的Python編程,並決定在一個小項目學習語言。Python CSV行循環

基本上我想:

  1. 閱讀CSV文件的第一個單元格。
  2. 詢問該單元格值是否「喜歡」。
  3. 如果喜歡,請寫入1.,「1」單元格旁邊的列。
  4. 否則,寫「0」。
  5. 重複下一行,直到列表結束。

我現在代碼:

import csv 

reader = csv.reader(open("mylist.csv"), delimiter=',') 

data = [] 

for row in reader: 
    data.append(row) 

ask = (data[0][0]) 

ans = input("Do you like {}? ".format(ask)) 

if ans == ("y"): 
     f = open('mylist.csv', 'r') 
     reader = csv.reader(f) 
     data = list(reader) 
     f.close() 
     data[0][1] = '1' 
     my_new_list = open('mylist.csv', 'w', newline='') 
     csv_writer = csv.writer(my_new_list) 
     csv_writer.writerows(data) 
     my_new_list.close() 

else: 
     f = open('mylist.csv', 'r') 
     reader = csv.reader(f) 
     data = list(reader) 
     f.close() 
     data[0][1] = '0' 
     my_new_list = open('mylist.csv', 'w', newline='') 
     csv_writer = csv.writer(my_new_list) 
     csv_writer.writerows(data) 
     my_new_list.close() 

所以基本上,我堅持試圖讓下一行的內容。

僅供參考,我期待在此過程中實現機器學習。

首先學習如何以基本的方式做到這一點。

任何幫助,歡迎。

謝謝!

+0

其實你似乎並沒有意識到你所承擔的任務的複雜性。同時閱讀和寫入CSV文件非常非常困難。這就是爲什麼人們在RDBMS成爲常見的地方之前在糟糕的過去使用固定長度的記錄 – e4c5

+3

不要試圖將它重新寫回到同一個文件中。嘗試在內存中保存更新的版本(列表和字典等),並在退出時將其寫入文件。您可以創建一個新的結果文件或覆蓋該文件。 –

+0

直到我開始嘿嘿,我才知道任務的複雜性。但是現在我想找到完成@ e4c5的最佳方式。 – Humbis

回答

0

您不應該同時讀取和寫入同一個文件/列表/字典。如果這樣做,對數據的引用可能會改變。你可以從你的任務開始。但是請注意,隨着文件的增長,代碼變得越來越慢。

import csv 

reader = csv.reader(open("test.csv", 'r'), delimiter=',') 
content = [] 

for row in reader: 
    item = row[0] 
    ans = raw_input("Do you like {}? ".format(item)) 

    if ans == 'y': 
     content.append([item, 1]) 
    else: 
     content.append([item, 0]) 

writer = csv.writer(open('test.csv', 'w')) 
writer.writerows(content) 
+0

你很好,非常感謝。正是我想要的。我知道我寫的內容誇張,但不知道如何實現。現在我看到它是多麼容易。 – Humbis

0

在我與CSV最後一部作品我打開該文件,以便:

import csv 
 
with open(name) as csvfile: 
 
       reader = csv.DictReader(csvfile) 
 
       for row in reader: 
 
         data.append(row)

0

如果你想要得到的CSV文件中包含的所有數據從輸入文件,但將問題結果添加進來,你可以使用類似這樣的東西。
它會在每條記錄中的第一項之後插入回答(0或1)。

import csv 

reader = csv.reader(open("mylist.csv", 'r'), delimiter=',') 
data = [] 

for row in reader: 
    data.append(row) 
for row in data: 
    ans = raw_input("Do you like {}? ".format(row[0])) 
    if ans == 'y': 
     row[1:1] = "1" 
    else: 
     row[1:1] = "0" 

writer = csv.writer(open('myresult.csv', 'w')) 
writer.writerows(data)