目标是
创建一个充满数据的临时 SCP 文件并将其上传到 sftp。要填充的数据是
TheList
,来自 list
类。
我能够实现什么
下面的代码会发生什么
已创建/放入 SFTP 中的文件,但该文件为空且有 0 字节。
问题
如何才能在 SFTP 上拥有一个类型为 SCP 且内容为
TheList
的文件?
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()
SFTPClient.putfo
上传 NamedTemporaryFile
对象,而不是尝试通过文件名引用临时文件(据称至少在 Windows 上不起作用):
csvfile.seek(0)
sftp.putfo(csvfile, SftpPath + "anewfile.csv")