2017-10-20 33 views
1

J'ai une question simple. J'utilise ce code pour stocker le dictionnaire des dictionnaires dans le fichier csv.comment puis-je changer le type de stockage Dict de la ligne à la colonne en utilisant Python

data = dataA,dataB, dataC, dataD 
w = csv.writer(open("test.csv", "w")) 
for x in data: 
    for field, possible_values in x.items(): 
     print(field, possible_values) 
     w.writerow([field, possible_values]) 

Les valeurs stockées que j'ai dans csv sont stockées dans des lignes mais je veux qu'elles soient stockées en tant que colonne.

Mon résultat réel csv:

name: Alex 
Old: 22 

Mon objectif en csv est devrait être comme ceci:

Name Old 
Alex 22 

Comment puis-je changer?

Update1:

l'indice est for key in x.keys(). Après plusieurs heures de travail, j'ai mis à jour mon code comme ça et ça marche mieux qu'auparavant mais j'ai encore un petit problème pour obtenir une nouvelle ligne à la fin de stocker toutes les valeurs et les clés x.keys() et y.values ​​() . de mes dictioanries dans un fichier csv

if not os.path.isfile(filename): 
    outfile = open(filename, "w") 
    #outfile.write("#Sequence,,,,") 
    for x in data: 
     print(x.keys()) 
     for key in x.keys(): 
      print(key) 
      store_key= key + "," 
      outfile = open(filename, "a") 
      outfile.write(store_key) 
      outfile.close() 


    for y in data: 
     print(y.values()) 
     for value in y.values(): 
      print(value) 
      store_value = value + ","  
      outfile = open(filename, "a") 
      outfile.write(store_value) 
      outfile.close 

Maintenant je dois séparer peut-être avec « \ n » entre les touches et les valeurs pour obtenir les valeurs les Arays od sous la ligne de clés.

Toute aide peut être appréciée.

+0

après la sortie attendue pour plusieurs dictionnaires – RomanPerekhrest

Répondre

0

Si vous tentez d'accéder et d'écrire dans un fichier, cela ralentira votre code. Maintenez le texte de sortie dans une chaîne, supprimez la dernière virgule (,) et ajoutez un caractère de nouvelle ligne à la fin de la chaîne. Cela accélérera votre code, et une nouvelle ligne sera ajoutée. Vous pouvez faire la même chose pour la seconde pour la boucle aussi.

line = "" 
for x in data: 
    for key in x.keys(): 
     line += key + "," 

line = line[:-1]+"\n" # Delete last character and add new line 
outfile = open(filename, "a") 
outfile.write(line) 
outfile.close() 
+0

je ne peux pas utiliser la fonction parce que je besoin pour stocker la liste des disions dans le fichier csv yithout [] et '" pour x dans les données: outfile = open (nom de fichier," a ") outfile.write (str (x.keys())) outfile.close ( le problème que j'ai maintenant que je suis dans le fichier csv tous les symboles du dictionnaire parce que iam utilisant str() Quand je n'utilise pas str() j'ai eu une erreur que yrite argument doit être un str pas dic_keys – AhmyOhlin

+0

@AhmyOhlin Pouvez-vous ajouter votre résultat attendu à votre question pour 'data = [{" name ":" Alex "," age ":" 22 "," sexe ":" male "}, {"name": "Alice", "age": "19", "sex": "female"}] ' – Alperen

+0

Si vous restez avec votre premier code et utilisez' w.writerow (x.keys()) 'comme @Dustin a dit, vous ne devez pas utiliser 'str()'. Utilisez 'data' que j'ai donné un commentaire précédent. Tu verras, ça marche. – Alperen

0

Vous pouvez écrire une ligne des clés du dictionnaire, puis une rangée de valeurs.

for x in data: 
    w.writerow(x.keys()) 
    w.writerow(x.values()) 
+0

merci de répondre. Votre conseil fonctionne mais j'ai toutes les entités dans une colonne. Mon objectif, cette prochaine entité devrait être écrit dans la colonne suivante. Nom Alex Old ------------ Nom Old Alex 22 mon objectif est: Nom Old Alex 22 – AhmyOhlin