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

2024-05-21

我的代码首先将行写入 CSVio.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从StringIO到 SFTP 服务器?


在尝试上传缓冲区之前,您必须将缓冲区的读取指针返回到开头:

fileBuffer.seek(0)
sftp.putfo(fileBuffer, file2BeSavedAs)

不过更好的方法是将 CSV 直接写入服务器,而不需要中间缓冲区。使用Connection.open https://pysftp.readthedocs.io/en/latest/pysftp.html#pysftp.Connection.open获取代表 SFTP 服务器上文件的类文件对象:

with sftp.open(file2BeSavedAs, mode='w', bufsize=32768) as f:
    writer = csv.writer(f, delimiter=',') 
    # ...

为了bufsize论证,参见:
写入使用 Paramiko/pysftp“打开”方法打开的 SFTP 服务器上的文件很慢 https://stackoverflow.com/q/58111798/850848


对于类似的问题,带有进度显示,请参阅:
如何使用Paramiko getfo从SFTP服务器下载文件到内存进行处理 https://stackoverflow.com/q/50531631/850848


虽然 pysftp 已经死了。你最好用Paramiko。看pysftp 与 Paramiko https://stackoverflow.com/q/48434941/850848。对于 Paramiko,代码几乎是相同的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pysftp putfo 在 SFTP 服务器上创建一个空文件,但不传输来自 StringIO 的内容 的相关文章

随机推荐

  • 我需要在Django+Gunicorn+GEvent+Boto结构中调用monkey.patch_all()吗?

    我的网站使用的是 Django Gunicorn GEvent 我必须使用 Boto for DynamoDB 的一个功能 我需要调用monkey patch all 来使Boto变成greenlet吗 如果您使用默认的工人阶级配置 那么你
  • 初始化参数时会发生什么? C++

    void foo int i int k 7 cout lt lt k int main foo 1 2 k将输出2 我的问题是 foo 按什么顺序初始化参数并获取参数 foo 得到 2 的过程是什么 谢谢 void foo int i i
  • 如何将两个long转换为字节数组=如何将UUID转换为字节数组?

    我正在使用 JavaScriptUUID并且需要将 UUID 转换为字节数组 奇怪的是 UUID 类不提供 toBytes method 我已经了解了这两种方法 UUID getMostSignificantBits and UUID ge
  • 如何对ArrayList(int)进行排序

    我怎样才能排序Arraylist按升序和降序排列 例子 ArrayList list new ArrayList list Add 2 list Add 8 list Add 0 list Add 1 如何按升序和降序对上面的列表进行排序
  • 如何在 R 中 fork 进程

    我试图了解 R 多核包实现的分叉系统 包的例子是 p lt fork if inherits p masterProcess cat I m a child Sys getpid n exit I was a child cat I m t
  • React-redux useDispatch() 未捕获类型错误

    我正在尝试创建一个简单的组件来使用 React Redux 钩子分派操作useDispatch 我收到一个错误 我已将组件修剪到发生错误的位置 当调用 useDispatch 函数时会发生这种情况 import useDispatch fr
  • 在 jenkins 中运行 Maven 项目时出现 java.lang.reflect.InitationTargetException

    这是堆栈跟踪树 我在 Jenkins 中运行我的 Maven 项目时得到的 我不明白我的代码有什么问题 也许是因为 Jenkins 中的一些插件 lt JENKINS REMOTING CAPACITY gt channel started
  • 有没有办法等待原子整数的变化

    有没有办法等待AtomicInteger这样我就不必继续休眠当前线程并继续检查AtomicInteger像这样 while atomicInt get gt 0 Thread sleep 1000 我知道有这样的事情CountDownLat
  • Jetty 中不同端口上的独立 Web 应用程序

    我需要以下设置 Jetty 必须监听端口8080 and 9090 每个端口必须有自己单独的应用程序 即webapp1运行于8080 and webapp2 on 9090 网络应用程序只能在其指定端口上访问 即webapp2一定不 可在港
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • 如何获取通讯录图片数据的裁剪框?

    AddressBook 框架提供 ABPersonCopyImageData 用于获取每个地址簿条目的联系人图像 这对于图像数据来说非常有用 但用户也可以出于框架目的调整图像的大小和裁剪图像 当我获取图像数据时 我得到的是完整图像 而不是裁
  • JTextArea 中的密码

    有什么办法使用JTextArea当用户键入时隐藏文本 有点像密码 in JTextArea我有 密码 在最后一行中 用户在该行中键入的任何内容都不应该可见 我尝试过setForeground将字体颜色设置为文本区域颜色的方法 这使得文本不可
  • 如何从 C# 代码访问 wpf 中的 ResourceDictionary?

    我有一个DataTemplate在我想通过 C 代码访问的 xaml 文件中定义 谁能告诉我如何访问它 我添加了一个新的ResourceDictionary文件 其名称是Dictionary1 xaml 我有一个数据模板 例如
  • Django 使用 order_by 和 .annotate() 并获取相关字段

    我有以下数据 该查询按 topicid 分组 然后在每个组中获取最大日期 帖子频率并计算作为贡献者的作者数量 info model InfoModel objects values topicid annotate max Max date
  • Android Form与EditText使屏幕闪烁

    我不知道为什么当 EditText 聚焦然后滚动布局时我的 表单 活动会闪烁 它只发生在 Android 4 0 的设备上 我正在使用表布局并动态添加 TableRow 我的 TableRow 是这样的
  • Scala 中的条件未来

    给定这两个 future 仅当条件为真时我才需要运行第一个 future 请参阅if y gt 2 但我有一个例外Future filter predicate is not satisfied 这是什么意思以及如何修复该示例 object
  • 是否允许从 TYPE*​​ 转换为 unsigned char*?

    C99 特别是第 6 2 6 1 节第 4 段 规定允许将对象表示复制到 unsigned char 数组中 struct int foo double bar baz unsigned char bytes sizeof baz Do t
  • 如何在 box2d 中停止作用在物体上的力

    我正在 iPhone 上使用 box2d 来创建游戏 我的身体受重力影响向下移动 而不是向右或向左移动 它会被另一个物体击中 然后向右或向左移动 然后我有一个重置按钮 可以将身体移回到起点 唯一的问题是它仍在向右或向左移动 如何抵消球已经行
  • 排除单个浏览器使用 CSS 类

    我想排除 Internet Explorer 使用特定的 CSS 类 这可能吗 Details 我有一个 css 类 看起来像 input type radio checked input type radio hover box shad
  • pysftp putfo 在 SFTP 服务器上创建一个空文件,但不传输来自 StringIO 的内容

    我的代码首先将行写入 CSVio StringIO fileBuffer io StringIO write header header writer csv DictWriter fileBuffer fieldnames columnN