2017-06-06 38 views
1

嘗試使用StringIO將數據幀導出到csv並使用paramiko通過SFTP傳輸它。該文件成功通過,但它是空的。任何想法爲什麼?Paramiko成功上傳文件,但它是空的

import pandas as pd 
from StringIO import StringIO 
import paramiko 

names = ['Bob','Jessica','Mary','John','Mel'] 
births = [968, 155, 77, 578, 973] 

BabyDataSet = list(zip(names,births)) 
df = pd.DataFrame(data = BabyDataSet, columns=['Names', 'Births']) 

buf = StringIO() 
df.to_csv(buf, sep = ',', header = True, index = False) 
#buf.getvalue() # Correct output 

transport = paramiko.Transport(('localhost', 22)) 
transport.connect(username='user', password='pass') 
sftp = paramiko.SFTPClient.from_transport(transport) 

upload_path = '/Users/user/Desktop/test.csv' 
sftp.putfo(buf, upload_path) 
sftp.close() 

回答

2

通過這一行,您已經寫入buf就好像它是一個文件。

df.to_csv(buf, sep = ',', header = True, index = False) 

它是一個類似文件的對象,所以它有一個參考文件的距離。當putfo試圖從buf嘗試讀取時,它將從最後使用的位置讀取,並且由於您已寫入緩衝區,該位置在數據的末尾。無論文件中的當前位置如何,buf.getvalue()均返回緩衝區內容的整個。在正常閱讀時尋求一切:

df.to_csv(buf, sep = ',', header = True, index = False) 
buf.seek(0) # rewind to the beginning of the 'file' 
sftp.putfo(buf, upload_path) 
+0

謝謝!它現在有效 – dem7w2

相關問題