2017-10-15 8 views
0

J'essaye d'écrire des données de dictionnaire dans le fichier csv.meilleure façon d'écrire des données de dictionnaire dans csv ou excel

Clés:

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

Dictionnaire

{'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]'} 

Je pensais chaque dictionnaire sera écrit sur la ligne à chaque valeur dans la nouvelle colonne

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

Je suis d'obtenir des résultats comme ceci, en une seule colonne:

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] 

Pouvez-vous s'il vous plaît m'aider à l'écrire de manière correcte? Aussi, quand j'ajouter de nouveaux enregistrements, il doit se joint

Mon code:

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

Sortie prévue

enter image description here

+1

Si vous écrivez un dictionnaire dans un fichier CSV, utilisez [ 'csv.DictWriter'] (https: // docs.python.org/3/library/csv.html#csv.DictWriter). Actuellement, vous écrivez explicitement chaque paire clé-valeur sur sa propre ligne ('writer.writerow ([clé, valeur])'), il n'est donc pas clair pourquoi ce résultat vous a étonné. – jonrsharpe

+0

Le code est illisible dans les commentaires, particulièrement dans Python où les espaces sont importants. ** [Modifier] la question **, pour donner un [mcve]. – jonrsharpe

+0

Merci @jonrsharpe, j'ai essayé 'writer = csv.DictWriter (csv_file, res.keys())' qui me donne l'erreur 'ValueError: dict contient des champs pas dans les noms de champs: 'Aarti Yadav.docx' – honeyboney

Répondre

0

Dès que vous travaillez avec des tables, je recommande les pandas.

Voici la solution de pandas géants:

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) 

sortie:

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

Votre script a été itérez chaque valeur paire de clés dans votre dictionnaire et appeler writerow() pour chaque paire. writerow() vous donnera une seule nouvelle ligne, donc l'appeler plusieurs fois de cette façon vous donnera une ligne par paire.

res ne contient que des données pour une seule ligne de votre fichier CSV. L'utilisation d'un csv.DictWriter(), un seul appel à writerow() convertit toutes les entrées du dictionnaire dans une ligne de sortie unique:

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) 

vous donnant un fichier de sortie dict.csv comme:

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] 

En passant explicitement fieldnames est force le l'ordre des colonnes dans la sortie à ce que vous fournissez. Si la commande n'est pas importante, vous pouvez utiliser fieldnames=res.keys()