2016-03-31 13 views
0

EDIT: Sieht aus wie Sätze wurden verwendet, um das Diktat zu erstellen, und die Liste war eine Liste dieser dicts. @ That1Guy lieferte die richtige Antwort und erwähnte, dass DictWriter das Problem löst.Schreiben Sie eine Liste von Sätzen in CSV - Python

Ich habe eine Liste von Sätzen, die die folgenden Daten enthalten:

{'dns-a': '93.184.216.34', 'domain-name': 'example.com', 'fuzzer': 'Original*'} 
{'dns-a': '54.174.149.30', 'domain-name': 'examplea.com', 'fuzzer': 'Addition'} 
{'domain-name': 'exampleb.com', 'fuzzer': 'Addition'} 
{'dns-a': '104.130.124.96', 'domain-name': 'axample.com', 'fuzzer': 'Bitsquatting'} 
{'domain-name': 'mxample.com', 'fuzzer': 'Bitsquatting'} 
{'dns-a': '52.0.22.168', 'domain-name': 'exarnple.com', 'fuzzer': 'Homoglyph'} 
{'dns-a': '64.57.183.2', 'domain-name': 'examp1e.com', 'fuzzer': 'Homoglyph'} 
{'domain-name': 'exampl-e.com', 'fuzzer': 'Hyphenation'} 
{'domain-name': 'exakmple.com', 'fuzzer': 'Insertion'} 

Wie kann ich das in eine CSV schreiben, wo die erste Hälfte des Satzes die Spaltennamen und die zweiten bezeichnet ist der Wert? Zum Beispiel sollte es so aussehen, wenn ich es in Excel öffnen:

dns-a   domain-name fuzzer 
93.184.216.34 example.com Original 
54.174.149.30 examplea.com Addition 
       exampleb.com Addition 
+0

Dies sind Wörterbücher, keine Sätze, und sie sind von Natur aus ungeordnet, so dass Sie nicht einmal darauf verlassen können, dass sie in der Reihenfolge erscheinen. Wählen Sie einfach eine Reihenfolge der Schlüssel aus, durchlaufen Sie jedes Wörterbuch, indem Sie jeden Schlüssel in der von Ihnen definierten Reihenfolge abfragen, indem Sie die Werte durch Kommas trennen. –

+0

Nicht zu pedantisch, aber das ist 9 separaten Wörterbücher - es gibt keine Listen oder legt – jDo

+3

https://docs.python.org/2/library/csv.html#csv.DictWriter – That1Guy

Antwort

2

Sie haben noch sets, haben Sie dicts. In diesem Fall sollten Sie die Klasse DictWriter im Modul csv verwenden.

Aus der Dokumentation:

Erstellen Sie ein Objekt, das wie ein regelmäßiger Autor arbeitet aber Karten Wörterbücher auf Ausgabezeilen.

import csv 

with open('names.csv', 'w') as csvfile: 
    fieldnames = ['first_name', 'last_name'] 
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 

    writer.writeheader() 
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'}) 
    writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'}) 
    writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'}) 
0

können Sie writerows anstelle von writerow. Ihr Fall:

import csv 

data = [{'dns-a': '93.184.216.34', 'domain-name': 'example.com', 'fuzzer': 'Original*'}, 
     {'dns-a': '54.174.149.30', 'domain-name': 'examplea.com', 'fuzzer': 'Addition'}, 
     {'domain-name': 'exampleb.com', 'fuzzer': 'Addition'}, 
     {'dns-a': '104.130.124.96', 'domain-name': 'axample.com', 'fuzzer': 'Bitsquatting'}, 
     {'domain-name': 'mxample.com', 'fuzzer': 'Bitsquatting'}, 
     {'dns-a': '52.0.22.168', 'domain-name': 'exarnple.com', 'fuzzer': 'Homoglyph'}, 
     {'dns-a': '64.57.183.2', 'domain-name': 'examp1e.com', 'fuzzer': 'Homoglyph'}, 
     {'domain-name': 'exampl-e.com', 'fuzzer': 'Hyphenation'}, 
     {'domain-name': 'exakmple.com', 'fuzzer': 'Insertion'}] 

with open('data.csv', 'w') as data_csv: 
    dict_writer = csv.DictWriter(data_csv, data[0].keys()) 
    dict_writer.writeheader() 
    dict_writer.writerows(data) 
Verwandte Themen