C.T*_*mas 4 python sftp stringio python-3.x pysftp
我的代码首先将行写入 CSV 中io.StringIO():
fileBuffer = io.StringIO()
# write header
header_writer = csv.DictWriter(fileBuffer, fieldnames=columnNames)
header_writer.writeheader()
# write lines
writer = csv.writer(fileBuffer, delimiter=',') 
for line in data:
            line_dec = line.decode('ISO-8859-1') 
            # print([line_dec])
            writer.writerow([line_dec])
以下代码还打印所有预期行:
$print(fileBuffer.getvalue())    # -> prints all expected rows
我还可以使用 pysftp 成功连接到 SFTP 服务器,甚至在使用 pysftp 时,代码也成功返回所有预期行:
with pysftp.Connection(host, username=user, password=pw, cnopts=cnopts) as sftp: 
            print('sucessfully connected to {} via Port 22'.format(host))
            print(fileBuffer.getvalue())    # -> prints all expected rows
            sftp.putfo(fileBuffer, file2BeSavedAs)   # -> no rows put on FTP Server
实际问题来了:
不幸的是,代码只创建了文件,而没有将数据分别写入正文。另一方面,我的代码不返回任何错误消息。
如何将 CSV 从StringIOSFTP 服务器放入?
在尝试上传缓冲区之前,您必须寻找缓冲区的读取指针回到开头:
fileBuffer.seek(0)
sftp.putfo(fileBuffer, file2BeSavedAs)
虽然更好的方法是将 CSV 直接写入服务器,而无需中间缓冲区。使用Connection.open以获得类似文件的代表SFTP服务器上的文件对象:
with sftp.open(file2BeSavedAs, mode='w', bufsize=32768) as f:
    writer = csv.writer(f, delimiter=',') 
    # ...
对于bufsize参数的目的,请参阅:
写入使用 pysftp "open" 方法打开的 SFTP 服务器上的文件很慢
类似的问题,有进度显示,参见:
How to use Paramiko getfo to download file from SFTP server to memory to process it
| 归档时间: | 
 | 
| 查看次数: | 1176 次 | 
| 最近记录: |