为了账号安全,请及时绑定邮箱和手机立即绑定

Paramiko 下载、处理和重新上传相同的文件

Paramiko 下载、处理和重新上传相同的文件

ABOUTYOU 2021-08-14 21:25:35
我正在使用 Paramiko 创建一个 SFTP 客户端来创建 JSON 文件的备份副本,读入原始内容,然后更新(原始)。我能够让这段代码工作:# open sftp connection stuff# read in json create backup copy - but have to 'open' twiceread_file = sftp_client.open(file_path)settings = json.load(read_file)read_file = sftp_client.open(file_path)  sftp_client.putfo(read_file, backup_path)# json stuff and updatingnew_settings = json.dumps(settings, indent=4, sort_keys = True)# update remote json filewith sftp_client.open(file_path, 'w') as f:    f.write(new_settings)但是,当我尝试清理代码并结合备份文件创建和 JSON 加载时:with sftp_client.open(file_path) as f:    sftp_client.putfo(f, backup_path)        settings = json.load(f)备份文件将被创建,但json.load由于没有任何内容而失败。如果我颠倒顺序,json.load将读取值,但备份副本将为空。我在 Windows 机器上使用 Python 2.7,创建到 QNX (Linux) 机器的远程连接。感谢任何帮助。
查看完整描述

1 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

如果你想第二次读取文件,你必须寻找文件读取指针回到文件开头:


with sftp_client.open(file_path) as f:

    sftp_client.putfo(f, backup_path)    

    f.seek(0, 0)

    settings = json.load(f)

尽管这在功能上等同于带有两个open的原始代码。


如果您的目标是优化代码,以避免两次下载文件,则必须将文件读取/缓存到内存中,然后从缓存中上传和加载内容。


f = BytesIO()

sftp_client.getfo(file_path, f)

f.seek(0, 0)

sftp_client.putfo(f, backup_path)    

f.seek(0, 0)

settings = json.load(f)


查看完整回答
反对 回复 2021-08-14
  • 1 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信