使用Paramiko SFTP rename函数时出现FileNotFoundError错误求助
问题排查与解决方法
核心错误原因
Paramiko的sftp.rename()是SFTP服务器端的文件操作,要求两个参数都是服务器上的合法路径。你传入的new_student_lite_path是本地Windows路径(X:/L0AutoImport/...),服务器上不存在这个路径,因此触发FileNotFoundError。
对应解决方法
根据你的实际需求选择以下方案:
方案1:将服务器文件下载到本地并改名
如果目标是把服务器文件存到本地X盘并改名,直接用sftp.get()即可,不需要调用rename():
StudentLitemaxfilepath = '/SchoolDistricts/South Orangetown/Level 0 Auto Imports/NY500301_StudentLite_SFTP_202402271345.csv' new_student_lite_path = 'X:/L0AutoImport/NY500301_STUDENT_LITE_UPDATE_2024_02_27.csv' # 直接下载并指定本地保存路径(自动完成改名) sftp.get(StudentLitemaxfilepath, new_student_lite_path) # 若需要下载后删除服务器原文件,再调用以下代码 sftp.remove(StudentLitemaxfilepath)
方案2:在SFTP服务器端移动并重命名文件
如果目标是在服务器内部移动文件到其他目录并改名,需要将new_student_lite_path替换为服务器上的目标路径:
StudentLitemaxfilepath = '/SchoolDistricts/South Orangetown/Level 0 Auto Imports/NY500301_StudentLite_SFTP_202402271345.csv' # 替换为服务器上的合法路径,比如服务器上的已处理文件目录 new_student_lite_path = '/SchoolDistricts/South Orangetown/Processed/NY500301_STUDENT_LITE_UPDATE_2024_02_27.csv' # 先检查目标目录是否存在,不存在则创建(需确保SFTP账号有目录创建权限) target_dir = '/SchoolDistricts/South Orangetown/Processed' try: sftp.stat(target_dir) except FileNotFoundError: # 若需递归创建多级目录,需自行实现递归mkdir逻辑 sftp.mkdir(target_dir) # 执行服务器端重命名/移动操作 sftp.rename(StudentLitemaxfilepath, new_student_lite_path)
额外排查点
- 服务器端目标目录权限:确保SFTP账号拥有目标目录的写入权限
- 路径大小写:若SFTP服务器是Linux/Unix系统,路径大小写敏感,需确认原路径和目标路径拼写完全一致
- 文件锁定:检查是否有其他进程正在读取原文件,导致rename操作无法访问
内容的提问来源于stack exchange,提问作者user23492696
相关产品推荐
相关产品推荐

