python - Python pysftp 下载失败并显示“IOError: [Errno 21] Is a directory”
问题描述
这是我想将文件从 SFTP 服务器下载到本地的示例 Python 脚本。
srv = pysftp.Connection(host=host, username=username, password=password, port=port, cnopts=connOption)
with srv.cd(sftppath):
data = srv.listdir()
try:
for infile in data:
print infile
srv.get(infile, destination, preserve_mtime=True)
我可以成功连接,它列出了文件夹中的所有文件。但是当我srv.get()
用来下载到我的桌面时,我收到以下错误,
IOError:[Errno 21] 是一个目录:'/Users/ratha/Desktop'
错误堆栈;
Traceback (most recent call last):
File "/Users/ratha/PycharmProjects/SFTPDownloader/handler.py", line 9, in <module>
main()
File "/Users/ratha/PycharmProjects/SFTPDownloader/handler.py", line 5, in main
downloadSFTPFiles()
File "/Users/ratha/PycharmProjects/SFTPDownloader/Utilities/SFTPConnector.py", line 49, in downloadSFTPFiles
srv.get(infile, destination, preserve_mtime=True)
File "/Users/ratha/PycharmProjects/SFTPDownloader/venv/lib/python2.7/site-packages/pysftp/__init__.py", line 249, in get
self._sftp.get(remotepath, localpath, callback=callback)
File "/Users/ratha/PycharmProjects/SFTPDownloader/venv/lib/python2.7/site-packages/paramiko/sftp_client.py", line 801, in get
with open(localpath, "wb") as fl:
IOError: [Errno 21] Is a directory: '/Users/ratha/Desktop'
我在这里做错了什么?
解决方案
堆栈跟踪实际上非常清晰。只关注这两行:
with open(localpath, "wb") as fl:
IOError: [Errno 21] Is a directory: '/Users/ratha/Desktop'
显然,pysftp
尝试/Users/ratha/Desktop
作为二进制写入文件打开,这并不顺利,因为那已经是一个目录。文档将确认这一点:
localpath (str) -- 要复制的本地路径和文件名,目标。如果未指定,则将文件复制到本地当前工作目录
因此,您需要找出要另存为的文件名,并使用(最佳实践)os.path.join('/Users/ratha/Desktop', filename)
获取路径和文件名,而不仅仅是路径。
推荐阅读
- c++ - 条件分支评估
- python - 用 while as 求偶数
- julia - 错误:预期要注册的包 `PkgAuthentication [4722fa14]`
- javascript - 如何从javascript中的国家代码获取国家名称
- c - 循环保持打印垃圾值,处理二进制文件
- excel - 将具有指定日期的数据从一个工作簿复制到另一个工作簿
- android - Expo Speech恢复和暂停方法不适用于Android - React Native
- discord - Discord JS message.member.roles.cache.some
- video - Mencoder 错误 - 合并两个具有相同 fps、分辨率和编解码器的视频文件失败
- xslt - 节点名未在 XSLT 中返回扩展的 QName