目标是
创建一个包含数据的临时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")