Python OrderedDict到CSV:消除空行

时间:2016-07-20 19:08:23

标签: python csv line-breaks ordereddictionary

当我运行此代码时......

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文件看起来很正常吗?

我根据sys.version_info使用Python 3.4.3。

以下是一些代码和输出对,用于显示我正在使用的数据类型:

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

1 个答案:

答案 0 :(得分:1)

两种可能的可能性:输出文件需要以二进制模式打开和/或需要告诉编写者不要使用DOS样式行结尾。

要在Python 3中以二进制模式打开文件,请将当前with open行替换为:

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

消除DOS样式行结尾尝试:

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