我正在上传文件,然后要移动它。上传部分有效,但是尝试移动会引发访问错误。这是为什么?我还尝试移动目录中已有的文件,但这会导致相同的错误。
为简化起见,我将文件“移动”到成功写入的目录中。 FTP设置允许对该帐户进行读/写/执行,并且使用Filezilla,我也可以重命名文件。
代码:
import ftplib
testfile = "D:\movethis.txt";
session = ftplib.FTP('<IP>', '<U>', '<P>');
session.cwd("XXX\TestPyUpload\upload");
print(session.pwd());
file = open(testfile, 'rb');
session.storbinary('STOR movethis.txt', file);
session.rename("XXX\TestPyUpload\upload\movethis.txt", "XXX\TestPyUpload\upload\movethis2.txt");
file.close();
session.quit();
答案 0 :(得分:1)
session.cwd("XXX\TestPyUpload\upload");
您当前的工作目录为XXX\TestPyUpload\upload
。
session.storbinary('STOR movethis.txt', file);
这会将文件movethis.txt
保存到当前工作目录中,即路径为XXX\TestPyUpload\upload\movethis.txt
。
session.rename("XXX\TestPyUpload\upload\movethis.txt", "XXX\TestPyUpload\upload\movethis2.txt");
未知XXX
到底是什么。但是,如果它不是以\
开头,则这是一条相对路径。在这种情况下,rename
命令中的名称将相对于当前工作目录(XXX\TestPyUpload\upload
)进行解释,即您将XXX\TestPyUpload\upload\XXX\TestPyUpload\upload\movethis.txt
重命名为XXX\TestPyUpload\upload\XXX\TestPyUpload\upload\movethis2.txt
。源既不存在,也不存在目标目录,这解释了服务器引发的错误。
...
session.rename("movethis.txt", "movethis2.txt");
确实可以工作。
这些名称也被解释为与工作目录相关,即,按照您最初的意图将XXX\TestPyUpload\upload\movethis.txt
重命名为XXX\TestPyUpload\upload\\movethis2.txt
。
...
session.rename("\XXX\TestPyUpload\upload\movethis.txt", "\XXX\TestPyUpload\upload\movethis2.txt");
也是如此(在开头添加了\
。
在这种情况下,您使用的是绝对文件名,这就是为什么它不考虑当前工作目录的原因,从而避免了原始问题。