Python:从FTP服务器检索多个文件

4

[enter image description here]

我正在尝试使用Python脚本从FTP服务器获取一些文件,但遇到了一些问题。我已经搜索了相关信息,但没有成功。以下是我所知道的:

session2.cwd("/archive")
maps = session2.nlst()
opslagplaats = input("waar wil je de backup opslaan?")
backupnaam = input("hoe wil je de backup noemen?")
if opslagplaats == "":
    opslagplaats = "C:\\backups eindwerk"
os.chdir(opslagplaats)
os.mkdir(backupnaam)
os.chdir(opslagplaats + "\\" + backupnaam)
for i in range(len(maps)):
    session2.cwd("/archive/" + maps[i])
    os.mkdir(maps[i])
    os.chdir(opslagplaats + "\\" + backupnaam + "\\" + maps[i])
    files = session2.nlst()
    for j in range(len(files)):
        file = open(files[j], "wb")
        session2.retrbinary("RETR " + files[j], file.write)

当我尝试运行这段代码时,它告诉我找不到给定的文件,位于C:\\backups eindwerk\\omglld\\MonMay81345092017196内。

这是文件在FTP服务器上的位置,我想将它们复制/备份到我的PC本地位置。


1
“it tells me” - 它是在什么时候告诉你的?在哪一行/语句?就在第一个文件里吗?还是稍后才有提示? - Martin Prikryl
同时发布一份英文代码! - Martin Prikryl
顺便提一句,不是所有的FTP服务器都接受反斜杠文件分隔符。你可以导入posixpath模块,并在任何平台上使用它的join函数来获得规范的路径分隔符。 - tdelaney
我不认为您需要翻译提示...但是示例代码是否应该包含它们?一个模拟的例子,去除了冗余的内容 - 但仍然为您提供错误信息 - 这是理想的。 - tdelaney
1个回答

1
一个明显的问题是:
os.mkdir(maps[i])

它将在第一次通过时工作。但是在以后,您将会创建前一个子文件夹的子文件夹。您必须使用完整路径,就像在os.chdir中一样:

os.mkdir(opslagplaats + "\\" + backupnaam + "\\" + maps[i])

(或在循环结束时弹出子文件夹)。
无论如何,为什么要重新发明轮子?使用现有的解决方案进行递归下载:
使用ftplib下载目录树

1
谢谢,现在它可以工作了 :D 我想小细节会产生很大的影响。 - Tboske

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接