dem*_*7w2 2 python sftp paramiko pandas
尝试使用 StringIO 将数据帧导出到 csv 并使用 paramiko 通过 SFTP 传输它。文件成功通过,但它是空的。知道为什么吗?
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()
Run Code Online (Sandbox Code Playgroud)
buf
通过这一行,您就可以像文件一样进行写入。
df.to_csv(buf, sep = ',', header = True, index = False)
Run Code Online (Sandbox Code Playgroud)
它是一个类似文件的对象,因此它可以引用您对该“文件”的了解程度。当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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1968 次 |
最近记录: |