首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在循环中使用pysftp连接多个SFTP站点:"AttributeError:'Connection‘对象没有属性'CnOpts'“

在循环中使用pysftp连接多个SFTP站点:"AttributeError:'Connection‘对象没有属性'CnOpts'“
EN

Stack Overflow用户
提问于 2020-05-14 16:12:27
回答 1查看 374关注 0票数 1

有两个SFTP站点,我有用户名和密码。它们的内部和主机上都有相同的目录。我试图用Python编写一段代码来循环这些站点,并将文件保存在文件夹中。我从来没有写过从SFTP中提取数据的代码,所以如果我使用了一些错误的术语,请告诉我。

我不知道怎样才是最好的例子。我将添加在第一次迭代中工作的代码,但在第二次迭代中使用以下错误崩溃:

AttributeError:“Connection”对象没有属性“CnOpts”

我还注意到,当我在没有循环的情况下运行代码并一次从一个SFTP中提取数据时,如果我第二次尝试运行该代码,就会得到相同的错误。然后我清除内核,然后我可以再次运行该过程。

我的代码在第一次迭代时工作,然后在第二次迭代时崩溃,如下所示。此代码不会在您的计算机上运行,而是考虑添加它以供参考。

代码语言:javascript
复制
import pandas as pd
import pysftp as sftp

data = {'UserName': ['User Name1', 'User Name2'],
        'Password': ['Password-1', 'Password-2']}
user_password_df = pd.DataFrame(data)

## Creating the sftp connection
raw_ftp_list = []
cnopts = sftp.CnOpts()
cnopts.hostkeys = None
for x, j in user_password_df.iterrows():
    cnopts = sftp.CnOpts()
    cnopts.hostkeys = None
    host = 'sampleftp.site.com'
    user = j.iloc[0]
    pswd = j.iloc[1]
    with sftp.Connection(host=host, username=user, password=pswd, cnopts=cnopts) as sftp:
        sftp.cwd('SAMPLE/DIR/') ## selecting remote directory
        server_files = sftp.listdir()
        # ...

我觉得我需要在循环的末尾添加一些东西来“重置”我的连接,但是我不知道那是什么。我尝试了一个简单的del cnopts来删除导致问题的变量。那不起作用。我还尝试在迭代结束时添加sftp.close(),但这也不起作用。另外,我需要这段代码才能遍历无限的sftp站点,因为我的用户名和密码的数据帧将得到更新,将来还会创建更多的站点。

如有任何建议或解决方案,将不胜感激。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-14 17:10:37

乞讨时,sftp是一个模块。因此,sftp.CnOpts()引用了模块中的一个类。

但是使用with ... as sftp,您可以重写sftp标识符的含义。因此,在另一个迭代中,sftp.CnOpts()不再有效,因为sftp引用的是Connection类,而不是sftp模块。

sftp变量重命名为其他变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61802162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档