当我运行此代码时......
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
答案 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")