如何将数据放入临时文件并在 SFTP 上以 CSV 形式发布

问题描述 投票:0回答:1

目标是

创建一个充满数据的临时 SCP 文件并将其上传到 sftp。要填充的数据是

TheList
,来自
list
类。

我能够实现什么

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

下面的代码会发生什么

已创建/放入 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
python csv sftp paramiko temporary-files
1个回答
1
投票

您不需要创建临时文件。您可以使用

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()

虽然更好的选择是使用 Paramiko

SFTPClient.putfo
上传
NamedTemporaryFile
对象,而不是尝试通过文件名引用临时文件(据称至少在 Windows 上不起作用):

csvfile.seek(0)
sftp.putfo(csvfile, SftpPath + "anewfile.csv")
© www.soinside.com 2019 - 2024. All rights reserved.