2017-08-04 102 views
2

編輯批准的答案是正確的,我的所有數據都出現在文件中,但是由於它正在循環並將每條信息寫入新行,所以數據是無組織,出現在一個層疊模式。在這一點上,這只是一個格式問題。任何人都遇到類似的問題?Python - 寫入CSV文件和循環

我有一個for循環,我在其中定義了多個變量。我需要將這些變量中的值打印到CSV,而不必一遍又一遍地重複寫入行。我知道解決這個問題的方法是在for循環之外放置「with open」語句,但是python不再識別我的變量。

我認爲解決方案的另一部分是在變量內追加數據,以便您可以在for循環之外調用它,但我不確定如何爲我的情況執行此操作。

實施例:

for item in my_list: 

    info = inspect.getmembers(item) 
    name = info[0] 

import csv 

with open("sample.csv", "w") as csvFile: 
    fieldnames = ['Item Name'] 
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames) 

    writer.writeheader() 
    writer.writerow({'Item Name': name }) 
csvFile.close() 

在這個例子中,不能定義變量「name」,因爲它是內for循環定義。

+0

如果您使用'with',則不需要'csvFile.close()'。另外,'name'在你的循環中總是被重新定義,你是否想把所有的'info [0]'添加到列表中?另一件事,你應該使用一個名爲'list'的變量,因爲它已經被python用來創建空列表。最後,'with'已經在'for'循環之外了,你得到了什麼樣的輸出與你期望的? – jacoblaw

+0

是的,我需要將所有信息[0]寫入csv。假如我打印'name'然後運行這個代碼,我可以看到列表中每個項目的名稱,但是當我將它寫入csv時,我只能看到列表中最後一個項目的名稱。 –

回答

5
import csv 
with open("sample.csv", "w") as csvFile: 
    fieldnames = ['Item Name'] 
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames) 
    writer.writeheader() 

    for item in list: 
     info = inspect.getmembers(item) 
     name = info[0] 

     writer.writerow({'Item Name': name }) 
1

with你的循環之前,這樣就可以從內部值寫入到文件的for循環:

import csv 
with open('sample.csv', 'w') as csvFile: 
    fieldnames = ['Item Name'] 
    writer = csv.DictWriter(csvFile, fieldnames=fieldnames) 
    writer.writeheader() 

    for item in list: 
     # get the data you want from item 
     info = inspect.getmembers(item) 
     name = info[0] 

     # write the data to the file 
     writer.writerow({'Item Name': name }) 

注意(因爲我沒有足夠的聲譽尚未就此發表評論) :在Rohan的答案中發現的csvFile.close()不是必需的,因爲這是由with聲明處理的。另外,根據PEP8,他應該使用2個空格而不是4個縮進。