【问题标题】:Python: retrieving multiple files from an FTP serverPython:从 FTP 服务器检索多个文件
【发布时间】:2017-05-08 16:34:13
【问题描述】:

[]

尝试使用 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 上的本地位置。

【问题讨论】:

  • “它告诉我” - 它什么时候告诉你?什么行/语句?已经在第一个文件上?还是以后?
  • 也贴个英文码!
  • 顺便说一句,并非所有 FTP 服务器都接受反斜杠文件分隔符。您可以import posixpath 并在任何平台上使用其join 函数来进行规范路径分隔符。
  • 我认为您不需要翻译提示...但是示例代码甚至应该包含它们吗?一个去除多余杂物的模拟示例 - 但仍然对您不利 - 是理想的。

标签: python python-3.x ftp backup ftplib


【解决方案1】:

一个明显的问题是:

os.mkdir(maps[i])

它将在第一次通过时起作用。但稍后,您将创建前一个子文件夹的子文件夹。您必须使用完整路径,例如 os.chdir:

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

(或在循环结束时弹出子文件夹)。


无论如何,你为什么要重新发明轮子?使用现有解决方案进行递归下载:
Downloading a directory tree with ftplib.

【讨论】:

  • 谢谢,现在它可以工作了:我猜小东西会产生很大的不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 2012-07-17
相关资源
最近更新 更多