使用Paramiko下载含反斜杠和空格文件名时提示“No such file”
解决Paramiko SFTP下载含特殊字符文件的FileNotFoundError问题
问题根源
你代码里的反斜杠是Python的转义字符,导致传递给sftp.get()的路径和服务器上的真实文件路径不匹配:
- 若用
\处理空格,Python会把\解析成单个空格,若服务器文件名本身带反斜杠(比如hello\ world.txt),这种写法会丢失反斜杠字符; - 若服务器文件名仅含空格,错误添加的反斜杠会让路径多一个额外的反斜杠字符,导致找不到文件。
解决方法
分两种场景处理:
场景1:服务器文件名仅含空格(如second file.txt)
直接在字符串中写空格即可,无需添加反斜杠:
remote_path = "/home/user/second file.txt" local_path = "/home/localuser/second file.txt" sftp.get(remote_path, local_path)
或者用原始字符串(避免转义干扰):
remote_path = r"/home/user/second file.txt" local_path = r"/home/localuser/second file.txt"
场景2:服务器文件名含反斜杠+空格(如hello\ world.txt)
需要正确表示反斜杠字符,两种方式可选:
- 方式一:用双反斜杠转义
remote_path = "/home/user/hello\\ world.txt" local_path = "/home/localuser/hello\\ world.txt"
- 方式二:用原始字符串前缀
r
remote_path = r"/home/user/hello\ world.txt" local_path = r"/home/localuser/hello\ world.txt"
额外提示
- 原始字符串(
r"")会保留所有字符,不会解析转义序列,是处理特殊路径的最优选择; - 可以先通过
sftp.listdir("/home/user")查看目标目录下的文件名,确认路径拼写完全匹配。
内容的提问来源于stack exchange,提问作者A Little Coder
相关产品推荐
相关产品推荐

