2017-10-15 56 views
0

我正在嘗試將字典數據寫入csv文件。將字典數據寫入csv或excel的最佳方法

鍵:

['file_name', 'candidate_skills', 'SF_name', 'RB_name', 'mb_number', 'email'] 

字典

{'file_name': 'Aarti Banarashi.docx', 'candidate_skills': ['JQuery', ' ', 'Bootstrap', 'codeigniter', '\n', 'Javascript', 'Analysis', 'Ajax', 'HTML', 'Html5', 'SQL', 'MySQL', 'PHP', 'CSS'], 'SF_name': None, 'RB_name': 'aarti banarashi\t\t\t', 'mb_number': ['+918108493333'], 'email': '[email protected]'} 

我想每個字典將被寫在一行

'file_name' 'candidate_skills' 'SF_name' 'RB_name' 'mb_number'  'email' 

我得到的結果一樣在新列的每個值這個,僅限於單列:

file_name,Aarti Banarashi.docx 
candidate_skills,"['JQuery', ' ', 'Bootstrap', 'codeigniter', '\n', 'Javascript', 'Analysis', 'Ajax', 'HTML', 'Html5', 'SQL', 'MySQL', 'PHP', 'CSS']" 
SF_name, 
RB_name,aarti banarashi 
mb_number,['+918108493333'] 
email,[email protected] 

你能幫我寫出正確的方式嗎?此外,當我添加新的記錄,它應該得到追加

我的代碼:

with open('dict.csv', 'wb') as csv_file: 
    writer = csv.writer(csv_file) 
    for key, value in res.items(): 
     writer.writerow([key, value]) 

預計輸出

enter image description here

+1

如果你正在寫一本字典到CSV文件,使用['csv.DictWriter'(https://開頭docs.python.org/3/library/csv.html#csv.DictWriter)。目前,你明確地將每個鍵值對寫入它自己的行('writer.writerow([key,value])'),所以目前還不清楚爲什麼這樣的結果令你感到驚訝。 – jonrsharpe

+0

註釋中的代碼是不可讀的,特別是在空格很重要的Python中。 ** [編輯]問題**,給出[mcve]。 – jonrsharpe

+0

謝謝@jonrsharpe,我試着'writer = csv.DictWriter(csv_file,res.keys())'這給了我錯誤'ValueError:dict包含不在字段名中的字段:'Aarti Yadav.docx' – honeyboney

回答

0

只要你使用表格,我推薦熊貓。

這裏是大熊貓的解決方案:

d = {'file_name': 'Aarti Banarashi.docx', 'candidate_skills': ['JQuery', ' ', 'Bootstrap', 'codeigniter', '\n', 'Javascript', 'Analysis', 'Ajax', 'HTML', 'Html5', 'SQL', 'MySQL', 'PHP', 'CSS'], 'SF_name': None, 'RB_name': 'aarti banarashi\t\t\t', 'mb_number': ['+918108493333'], 'email': '[email protected]'} 

import pandas as pd 
df = pd.DataFrame.from_dict(d, orient='index').T 
df.to_csv("output.csv",index=False) 

輸出:

file_name,candidate_skills,SF_name,RB_name,mb_number,email 
Aarti Banarashi.docx,"['JQuery', ' ', 'Bootstrap', 'codeigniter', '\n', 'Javascript', 'Analysis', 'Ajax', 'HTML', 'Html5', 'SQL', 'MySQL', 'PHP', 'CSS']",,aarti banarashi   ,['+918108493333'],[email protected] 
0

你的腳本遍歷每個鍵值對在你的字典,然後爲每一對呼叫writerow()writerow()會給你一個新的行,所以多次以這種方式調用它會給你每行一行。

res只包含CSV文件中單個行的數據。使用csv.DictWriter(),以writerow()單一的通話將所有的字典條目轉換成一個單一的輸出行:

import csv 

res = {'file_name': 'Aarti Banarashi.docx', 'candidate_skills': ['JQuery', ' ', 'Bootstrap', 'codeigniter', '\n', 'Javascript', 'Analysis', 'Ajax', 'HTML', 'Html5', 'SQL', 'MySQL', 'PHP', 'CSS'], 'SF_name': None, 'RB_name': 'aarti banarashi\t\t\t', 'mb_number': ['+918108493333'], 'email': '[email protected]'} 
fieldnames = ['file_name', 'candidate_skills', 'SF_name', 'RB_name', 'mb_number', 'email'] 

with open('dict.csv', 'wb') as f_file: 
    csv_writer = csv.DictWriter(f_file, fieldnames=fieldnames) 
    csv_writer.writeheader() 
    csv_writer.writerow(res) 

給你一個輸出dict.csv文件:

file_name,candidate_skills,SF_name,RB_name,mb_number,email 
Aarti Banarashi.docx,"['JQuery', ' ', 'Bootstrap', 'codeigniter', '\n', 'Javascript', 'Analysis', 'Ajax', 'HTML', 'Html5', 'SQL', 'MySQL', 'PHP', 'CSS']",,aarti banarashi   ,['+918108493333'],[email protected] 

通過明確地傳遞fieldnames是強制的將輸出中的列排序爲您提供的內容。如果訂購不重要,你可以改用fieldnames=res.keys()