如何使用Python将Windows文件夹内所有文件上传到SFTP目录
问题解决办法
报错原因
你调用的pysftp.Connection.put()方法仅支持上传单个本地文件,直接传入文件夹路径files\csv时,系统会尝试将文件夹作为普通文件读取,因此抛出PermissionError: [Errno 13] Permission denied报错。
实现逻辑(含空文件夹跳过需求)
你需要先遍历本地文件夹筛选出所有待上传的文件,判断文件数量非空后再逐个上传,完整代码如下:
import os import pysftp with pysftp.Connection(host, username, password) as sftp: localpath = r'files\csv' remotepath = '/2021/November' # 筛选本地文件夹下的所有文件,排除子文件夹 local_files = [f for f in os.listdir(localpath) if os.path.isfile(os.path.join(localpath, f))] # 文件夹为空直接跳过执行 if not local_files: exit() # 可选:如果远程目录不存在,先创建 if not sftp.exists(remotepath): sftp.makedirs(remotepath) # 逐个上传文件 for file_name in local_files: local_file_path = os.path.join(localpath, file_name) remote_file_path = f"{remotepath}/{file_name}" sftp.put(local_file_path, remote_file_path)
补充说明
- 如果需要同时上传子目录内的文件,可以替换
os.listdir遍历逻辑为os.walk递归遍历 - 批量上传也可以直接使用pysftp封装的
put_r方法实现目录递归上传,调用前同样先做本地文件存在性判断即可
内容的提问来源于stack exchange,提问作者massu1000
相关产品推荐
相关产品推荐

