You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让pysftp仅下载文件前10MB后终止操作?

实现pysftp仅下载文件前10MB后终止

原代码里的pysftp.get()会完整下载整个文件,要实现只取前10MB后终止,需要手动控制文件读取的字节数,具体修改如下:

import os
import pysftp

sftp_folder_location = 'outbound'
local_path = '/home/ubuntu/data'
# 定义最大下载量:10MB = 10 * 1024 * 1024 字节
MAX_DOWNLOAD_SIZE = 10 * 1024 * 1024
# 单次读取的块大小(设为1MB,可按需调整)
CHUNK_SIZE = 1024 * 1024

sftp = pysftp.Connection(host=Hostname, username=Username, password=Password, cnopts=cnopts)
try:
    with sftp.cd(sftp_folder_location):
        if sftp.isfile(filename):
            local_file_path = os.path.join(local_path, filename)
            # 同时打开远程文件和本地文件,分块读写
            with sftp.open(filename, 'rb') as remote_file, open(local_file_path, 'wb') as local_file:
                downloaded_bytes = 0
                while downloaded_bytes < MAX_DOWNLOAD_SIZE:
                    # 计算本次可读取的最大字节数,避免最后一次读取超额
                    read_size = min(CHUNK_SIZE, MAX_DOWNLOAD_SIZE - downloaded_bytes)
                    chunk = remote_file.read(read_size)
                    if not chunk:
                        break  # 如果文件本身不足10MB,提前结束
                    local_file.write(chunk)
                    downloaded_bytes += len(chunk)
finally:
    sftp.close()

核心逻辑说明:

  • 放弃get()方法,改用sftp.open()直接操作文件对象,实现分块读取
  • 通过MAX_DOWNLOAD_SIZE严格控制总下载字节数
  • 循环读取时动态计算单次读取量,确保不超过剩余需要下载的大小
  • 用try...finally保证SFTP连接最终关闭,避免资源泄漏

内容的提问来源于stack exchange,提问作者Santhosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 00:09:22