[英]Python 3.6. How to iterate over multiple list in a for loop and write them to a CSV File using DictWriter()
[英]How to write information from a list to a csv file using csv DictWriter?
使用csv
模塊,我一直在嘗試使用dictwriter在python
中將列表中的信息傳遞/寫入python
的csv文件,並且出現一個奇怪的錯誤,女巫將處於實際代碼之下。 我想知道什么,代碼中的錯誤以及如何解決。
import csv
names = ['kisha' ,'smith' , 'kishasmith@gmail.com', 40000 , '1-1-2029' ,'janitor' ]
with open('employees.csv' , 'w')as employee_file:
fieldnames2 = ['first' , 'last' , 'email' , 'salary' , 'DOB' , 'occupation']
csvwriter = csv.DictWriter(employee_file , fieldnames = fieldnames2 , delimiter = ',')
csvwriter.writeheader()
for info in names:
csvwriter.writerow(info)
我看過其他與此主題相關的問題,但尼姑適用於我。
Traceback (most recent call last):
File "C:\Users\Kxrk\Downloads\Codes\Employee project\new.py", line 10, in <module>
csvwriter.writerow(info)
File "C:\Users\Kxrk\AppData\Local\Programs\Python\Python36-32\lib\csv.py", line 155, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))
File "C:\Users\Kxrk\AppData\Local\Programs\Python\Python36-32\lib\csv.py", line 148, in _dict_to_list
wrong_fields = rowdict.keys() - self.fieldnames
AttributeError: 'str' object has no attribute 'keys'
[Finished in 0.1s]
csv.DictWriter
類的writerow()
函數期望該參數為dict
,而您正在向其傳遞字符串。 在csv.DictWriter
文檔中明確提到:
創建一個操作類似於常規編寫器的對象,但將字典映射到輸出行。 fieldnames參數是一個鍵序列,用於標識字典中傳遞給writerow()方法的值寫入csvfile的順序。
為了使其工作,請傳遞dict
對象(帶有csv標頭和相應列值之間的映射) 。 例如:
import csv
names = ['kisha' ,'smith' , 'kishasmith@gmail.com', 40000 , '1-1-2029' ,'janitor' ]
fieldnames2 = ['first' , 'last' , 'email' , 'salary' , 'DOB' , 'occupation']
# for creating the dictionary object mapping "names" and "fieldnames2"
my_names_dict = dict(zip(fieldnames2, names))
with open('/path/to/my_file.csv' , 'w')as employee_file:
csvwriter = csv.DictWriter(employee_file , fieldnames = fieldnames2 , delimiter = ',')
csvwriter.writeheader()
csvwriter.writerow(my_names_dict)
上面的代碼將創建一個文件/path/to/my_file.csv
,其內容為:
first,last,email,salary,DOB,occupation
kisha,smith,kishasmith@gmail.com,40000,1-1-2029,janitor
在您的代碼中, info
應該是字典,來自字典列表。 目前是一個字符串...
無論如何,您的數據集更適合於簡單的csv.writer
我將names
更改為包含所有行的列表列表,將DictWriter
更改為writer
。 然后刪除帶有標題的writeheader
以進行writerow
。 也用於writerows
列出的名單上更好的速度(避免了循環):
import csv
names = [ ['kisha' ,'smith' , 'kishasmith@gmail.com', 40000 , '1-1-2029' ,'janitor' ],
# more employees here
]
with open('employees.csv' , 'w', newline="") as employee_file:
fieldnames2 = ['first' , 'last' , 'email' , 'salary' , 'DOB' , 'occupation']
csvwriter = csv.writer(employee_file , delimiter = ',')
csvwriter.writerow(fieldnames2)
csvwriter.writerows(names)
還要注意,您需要newline=""
(Python 3),否則您的csv文件在Windows上每隔一行將有一個空白行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.