如何将数据放入tempfile并在SFTP上以CSV形式发布



目标是

创建一个包含数据的临时SCP文件并将其上传到sftp。要填充的数据为TheList,来自list类。

我能做到的

  • 创建SFTP连接
  • 将文件推送到SFTP

下面的代码发生了什么?

有一个文件创建/放到SFTP,但是文件是空的,0字节

如何实现在SFTP上有一个内容为TheList的SCP类型的文件?

import paramiko
import tempfile
import csv
# code part to make and open sftp connection
TheList = [['name', 'address'], [ 'peter', 'london']]
csvfile = tempfile.NamedTemporaryFile(suffix='.csv', mode='w', delete=False)
filewriter = csv.writer(csvfile)
filewriter.writerows(TheList)
sftp.put(csvfile.name, SftpPath + "anewfile.csv")
# code part to close sftp connection

不需要创建临时文件。您可以使用csv.writer直接将行写入SFTP,使用使用SFTPClient.open打开的类文件对象:

with sftp.open(SftpPath + "anewfile.csv", mode='w', bufsize=32768) as csvfile:
writer = csv.writer(csvfile, delimiter=',')
filewriter.writerows(TheList)

参见pysftp putfo在SFTP服务器上创建一个空文件,但不流式传输StringIO的内容


回答你的字面问题:我相信你需要在上传临时文件之前冲洗它:

filewriter.flush()

参见如何在Python中使用tempfile.NamedTemporaryFile()

虽然更好的选择是使用ParamikoSFTPClient.putfo来上传NamedTemporaryFile对象,而不是试图通过文件名引用临时文件(据称至少在Windows上不起作用):

csvfile.seek(0)
sftp.putfo(csvfile, SftpPath + "anewfile.csv")

相关内容

  • 没有找到相关文章