2017-07-19 105 views
2

我有一個簡單的任務:在路易吉,店內熊貓數據幀在投寄箱CSV,使用Dropbox的 - 蟒蛇SDKPython的轉換StringIO的二進制

通常(與S3,例如),你可以使用StringIO的作爲一個文件像內存中的對象。它還偉大工程與熊貓df.to_csv()

不幸的是,Dropbox的SDK需要二進制類型,我不能怎麼StringIO的轉換成二進制:

with io.StringIO() as f: 
    DF.to_csv(f, index=None) 
    self.client.files_upload(f, path=path, mode=wmode) 

TypeError: expected request_binary as binary type, got <class '_io.StringIO'> 

ByteIO不會與df.to_csv()工作...

+0

試圖用'str()'強制'BytesIO'字符串? –

+0

嗯,我實際上需要相反 - 熊貓需要stringIO,我需要將結果轉換爲二進制的'dropbox' –

回答

3

如在this的答案中所看到的,dropbox需要一個字節對象,而不是文件,所以轉換爲BytesIO將無濟於事。但是,解決方案比這更簡單。你需要做的就是將你的字符串編碼爲二進制:

csv_str = DF.to_csv(index=None) # get string, rather than StringIO object 
self.client.files_upload(csv_str.encode(), path=path, mode=wmode) 
+0

真棒,謝謝! –