2016-07-20 7 views
0

Wenn ich diesen Code ausführen ...Python OrderedDict zu CSV: Die Beseitigung von Leerzeilen

from simple_salesforce import Salesforce 
sf = Salesforce(username='un', password='pw', security_token='tk') 
cons = sf.query_all("SELECT Id, Name FROM Contact WHERE IsDeleted=false LIMIT 2") 

import csv 

with open('c:\test.csv', 'w') as csvfile: 
    fieldnames = ['contact_name__c', 'recordtypeid'] 
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 

    writer.writeheader() 
    for con in cons['records']:  
     writer.writerow({'contact_name__c': con['Id'], 'recordtypeid': '082I8294817IWfiIWX'}) 

print('done') 

ich die folgende Ausgabe in meiner CSV-Datei bekommen ...

contact_name__c,recordtypeid 

xyzzyID1xyzzy,082I8294817IWfiIWX 

abccbID2abccb,082I8294817IWfiIWX 

Ich bin nicht sicher Warum sind diese zusätzlichen Zeilen da?

Irgendwelche Tipps, um sie los zu werden, damit meine CSV-Datei normal aussieht?

Ich bin auf Python 3.4.3 nach sys.version_info.


Hier sind ein paar mehr Code-und-Ausgangspaaren, die Art von Daten zu zeigen, ich arbeite mit:

from simple_salesforce import Salesforce 
sf = Salesforce(username='un', password='pw', security_token='tk') 
print(sf.query_all("SELECT Id, Name FROM Contact WHERE IsDeleted=false LIMIT 2")) 

produziert

OrderedDict([('totalSize', 2), ('done', True), ('records', [OrderedDict([('attributes', OrderedDict([('type', 'Contact'), ('url', '/services/data/v29.0/sobjects/Contact/xyzzyID1xyzzy')])), ('Id', 'xyzzyID1xyzzy'), ('Name', 'Person One')]), OrderedDict([('attributes', OrderedDict([('type', 'Contact'), ('url', '/services/data/v29.0/sobjects/Contact/abccbID2abccb')])), ('Id', 'abccbID2abccb'), ('Name', 'Person Two')])])]) 

und

from simple_salesforce import Salesforce 
sf = Salesforce(username='un', password='pw', security_token='tk') 
cons = sf.query_all("SELECT Id, Name FROM Contact WHERE IsDeleted=false LIMIT 2") 
for con in cons['records']: 
    print(con['Id']) 

produziert

+2

Mögliches Duplikat [CSV-Datei geschrieben mit Python hat Leerzeilen zwischen jeder Zeile] (http://stackoverflow.com/questions/3348460/csv-file-written-with-python-has-blank-lines-between-each-row) –

+0

Danke, ich hatte nicht Ich habe das gefunden - wahrscheinlich, weil ich "Ordereddict" in meine Suche eingefügt habe. –

Antwort

1

Zwei wahrscheinliche Möglichkeiten: Die Ausgabedatei muss im Binärmodus geöffnet werden und/oder der Schreiber muss angewiesen werden, keine DOS-Zeilenenden zu verwenden.

Um die Datei in Binär-Modus in Python zu öffnen 3 mit Ihrer aktuellen with open Linie ersetzen:

with open('c:\test.csv', 'w', newline='') as csvfile: 

die DOS-Stil Zeilenende versuchen zu beseitigen:

writer = csv.DictWriter(csvfile, fieldnames=fieldnames, lineterminator="\n") 
+0

Danke - es funktioniert sowohl mit Ihren Vorschlägen, als auch mit beiden zusammen. Beobachtungen: Wenn ich sie in "Textpad" von Helios Software Solutions öffne, haben die 1-oder-anderen Ausgabedateien 2 Leerzeichen am Ende jeder Zeile in der Hervorhebung, wenn ich "Strg + a", aber kein zusätzliches Ende-Padding wenn ich, sagen wir, Cursor durch den Text oder über das Ende der Zeile hinausklicke. Der "both-and" -Ausgang hat nur 1 Leerzeichen von "ctrl + a", was Überschwingen in dieser Software hervorhebt und wiederum keine "wahrnehmbaren" Leerzeichen. Alle 3 öffnen das gleiche mit dem bloßen Auge in Excel und ich bin mir sicher, wird für meinen Zweck arbeiten. –

+1

Gern geschehen. Ja, viel hängt von deiner Umgebung ab. Unterschiedliche Plattformen haben unterschiedliche Annahmen über Zeilenenden, und unterschiedliche Editoren behandeln verschiedene Arten von Zeilenenden auf unterschiedliche Weise. DOS-Stil Zeilenenden verwenden zwei Zeichen anstelle der von Linux/UNIX/Mac/BSD/etc. verwendet. – Feneric

Verwandte Themen