python - Paramiko 上传文件成功但为空

标签 python pandas sftp paramiko

尝试使用 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()

最佳答案

通过这一行,您已经将 buf 当作一个文件写入。

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

它是一个类似文件的对象,因此它可以引用您通过该"file"的距离。当 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)

关于python - Paramiko 上传文件成功但为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44394684/

相关文章:

python - 将 Pandas 数据框与列表数据框连接起来

python - 使用 DataFrame loc 时出现“标签 [1] 不在 [索引] 中”错误

locking - SFTP文件锁定机制

python - 使用 pexpect python 模块的 SFTP

python - 如何在 Pandas 中转换数据框

linux - 我无法使用 sftp get 命令重命名我正在下载的文件

python - 如何在Python中解析一个大的XML文件?

python - 使用 Python Pandas 从 Google Drive 或任何云服务读取 CSV 文件

python - 如何将多个列表划分在一起同时保持顺序?

在方法之外生成数据的 Pythonic 方式