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

Python通过paramiko SFTP获取文件并存储到本地变量的实现方法

解决方案

核心实现思路是直接读取SFTP返回的文件流到内存,无需落地到本地磁盘,两种常用实现方式如下:

方式1:直接将CSV内容存为字符串变量

import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='xxx', port='xx', username='xxx',
               password='xxx', allow_agent=False, look_for_keys=False)

sftp = client.open_sftp()
# 直接读取远程文件内容到CurFile变量
with sftp.open('AJTESTFILE.csv', 'r', encoding='utf-8') as fl:
    CurFile = fl.read()
sftp.close()
client.close()

此时CurFile就是完整的CSV文件字符串内容,可直接后续处理。

方式2:直接对接现有CSV修改逻辑,无需存本地文件

如果你不需要单独存原始CSV字符串,要直接做内容替换,可直接把SFTP返回的文件流传给csv.reader:

import paramiko
import csv
import io

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='xxx', port='xx', username='xxx',
               password='xxx', allow_agent=False, look_for_keys=False)

sftp = client.open_sftp()
new_rows = []
changes = {
    'vehicle_id': 'stock number',
    'vin': 'vehicle_id',
}

# 直接读远程文件流做处理,不需要写入本地磁盘
with sftp.open('AJTESTFILE.csv', 'r', encoding='utf-8') as fl:
    reader = csv.reader(fl)
    for row in reader:
        new_row = row
        for key, value in changes.items():
            new_row = [x.replace(key, value) for x in new_row]
        new_rows.append(new_row)

# 若需要把修改后的CSV内容也存在变量中(用于后续上传谷歌表格),可借助StringIO实现
output_obj = io.StringIO()
writer = csv.writer(output_obj)
writer.writerows(new_rows)
modified_csv = output_obj.getvalue() # 修改后的完整CSV字符串
output_obj.close()

sftp.close()
client.close()

原有代码错误说明

你之前调用sftp.getfo('AJTESTFILE.csv', fl='curFile', ...)写法有误,getfo的第二个参数需要传入可写的类文件对象,不是字符串格式的变量名,如果你要用getfo实现可以这么写:

import io
import paramiko

# 连接逻辑省略
sftp = client.open_sftp()
cur_file = io.BytesIO()
sftp.getfo('AJTESTFILE.csv', fl=cur_file)
cur_file.seek(0) # 重置文件指针到开头才能读取内容
csv_content = cur_file.read().decode('utf-8')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:06:04