2016-07-20 3 views
0

Когда я запускаю этот код ...Python OrderedDict в CSV: Устранение пустых строк

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') 

я получаю следующий вывод внутри моего файла CSV ...

contact_name__c,recordtypeid 

xyzzyID1xyzzy,082I8294817IWfiIWX 

abccbID2abccb,082I8294817IWfiIWX 

Я не уверен, почему эти дополнительные линии есть.

Любые советы по избавлению от них, поэтому мой CSV-файл будет нормальным?

Я нахожусь на Python 3.4.3 согласно sys.version_info.


Вот несколько кодов и выходных-пар, чтобы показать тип данных, я работаю с:

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")) 

производит

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')])])]) 

и

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']) 

производит

xyzzyID1xyzzy 
abccbID2abccb 
+2

Возможный дубликат [файла CSV написано с Python имеет пустые строки между каждой строкой] (http://stackoverflow.com/questions/3348460/csv-file-written-with-python-has-blank-lines-between-each-row) –

+0

Спасибо, я hadn ' t нашел, что один - вероятно, потому, что я продолжал вставлять «orderdict» в мой поиск. –

ответ

1

Возможны две возможности: выходной файл должен быть открыт в двоичном режиме и/или необходимо, чтобы писатель не использовал строки конца строки DOS.

Чтобы открыть файл в двоичном режиме в Python 3 заменить текущую with open линию:

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

устранить ДОС стиль линии окончаний попробовать:

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

Спасибо - он работает с любым из ваших предложений, а также с обоими из них вместе. Наблюдения: Когда я открываю их в «Textpad» Helios Software Solutions, в выходных файлах 1 или другого есть 2 пробела в конце каждой строки выделения, когда я «ctrl + a», но без дополнительного конца когда я, скажем, курсор через текст или щелкните за концом строки. «Both-and» output имеет только 1 пробел «ctrl + a», выделяя перерегулирование в этом программном обеспечении и, опять же, никаких «ощутимых» пробелов в противном случае. Все 3 открывают то же самое невооруженным глазом в Excel и, я уверен, будут работать для моих целей. –

+1

Добро пожаловать. Да, многое зависит от вашей среды. На разных платформах есть разные предположения о концах строк, а разные редакторы обрабатывают разные типы строк по-разному. Окончания строк в стиле DOS используют два символа, а не тот, который используется Linux/UNIX/Mac/BSD/и т. Д. – Feneric

Смежные вопросы