Python 通过sftp上传paramiko文件夹
在我的工作代码中,我有这个Python 通过sftp上传paramiko文件夹,python,ssh,sftp,paramiko,Python,Ssh,Sftp,Paramiko,在我的工作代码中,我有这个 import paramiko parent=os.path.split(dir_local)[1] for walker in os.walk(parent): try: self.sftp.mkdir(os.path.join(dir_remote,walker)) except: pass for file in walker[2]: sftp.put(os.path.join(walker[0],file
import paramiko
parent=os.path.split(dir_local)[1]
for walker in os.walk(parent):
try:
self.sftp.mkdir(os.path.join(dir_remote,walker))
except:
pass
for file in walker[2]:
sftp.put(os.path.join(walker[0],file),os.path.join(dir_remote,walker[0],file))
现在显示的错误是
Trying ssh-agent key 5e08bb83615bcc303ca84abe561ef0a6 ... success
Caught exception: <type 'exceptions.IOError'>: [Errno 2] Directory does not exist.
正在尝试ssh代理密钥5e08bb83615bcc303ca84abe561ef0a6。。。成功
捕获的异常::[Errno 2]目录不存在。
打印
walker
显示该文件夹中的所有文件,但我不知道为什么该文件夹不复制到sftp服务器,除非您已覆盖os.walk()
它会生成一个包含三个对象的元组:dirpath、dirnames、filenames
因此,您的os.path.join(dir\u remote,walker)
调用将始终引发异常,从而导致预期的目录无法创建
我发现这样编写os.walk()
循环更清晰:
for dirpath, dirnames, filenames in os.walk(parent):
remote_path = os.path.join(dir_remote, dirpath)
# make remote directory ...
for filename in filenames:
local_path = os.path.join(dirpath, filename)
remote_fliepath = os.paht.join(remote_path, filename)
# put file
请记住,
os.walk()
将遍历给定父目录中的任何目录 我可以用什么来代替os.walk()…?你可以用walk,你只需要正确地使用它。如果你只关心一个目录,并且它是直接的子目录,请使用os.listdir()
代替。好的,我试过了>os.listdir()。。它没有给我[Errno 2]这样的文件或目录:“2/1”local\u filepath=[os.path.join(parent,filename)作为os.listdir(parent)中的文件名]