【问题标题】:Python - download a file from a ftp server to a different local namePython - 从 ftp 服务器下载文件到不同的本地名称
【发布时间】:2014-07-09 18:57:25
【问题描述】:

我有以下代码:

ftp = ftplib.FTP(ftp_srv)
ftp.login(ftp_usr, ftp_pass)

for item in list:
    f = open(item.localName,"wb")
    ftp.retrbinary("RETR " + item.remoteName, f.write)
ftp.quit()
  • “localName”为本机文件名,例如:one.txt
  • “remoteName”是 FTP 服务器上的文件名,带有完整路径,类似于“/share/path/to/file.txt”

在 perl 中这很容易:

 $ftp->get($ftp_file, $local_file)

编辑: 上面的代码不起作用。我想将 remoteName 文件下载到本地机器上,并在本地机器上将该文件命名为 localName。我怎么做? :D EDIT2:将其列为列表

谢谢

【问题讨论】:

  • 那么你的问题是什么?
  • 上面的代码不起作用。我想将 remoteName 文件下载到本地机器上,并在本地机器上将该文件命名为 localName。我怎么做? :D 谢谢
  • 此脚本无法运行(没有列表、localName 或 remoteName 变量)- 这应该是伪代码还是真正失败的脚本?
  • ... 并且通过“不起作用”它怎么不起作用?向我们展示错误。
  • 这不是伪代码,这是实际代码,我只是删除了一部分,因为它不相关

标签: python ftp download


【解决方案1】:

您的代码的主要问题是:

  • item 从未在 for 循环中实际使用过
  • localNameremoteName 未在任何地方指定

此代码适用于我的机器:

import ftplib

ftp_srv = 'ftp.example.com'
ftp_usr = 'user'
ftp_pass = 'password'

ftp = ftplib.FTP(ftp_srv)
ftp.login(ftp_usr, ftp_pass)

files = [('remote_file1', 'local_file1'), ('remote_file2', 'local_file2')]

for file_ in files:
    with open(file_[1], "wb") as f:
        ftp.retrbinary("RETR " + file_[0], f.write)
ftp.quit()

每个file_ 都是一个tuple,其中包含服务器上文件的名称,以及您希望它在本地计算机上具有的名称,这些名称使用方括号表示法来引用。

【讨论】:

  • 很好的例子,除了最终的输出文件在for循环完成后保持打开状态,用with open(file_[1], "wb") as f:代替怎么样?
  • 我需要更改工作目录还是可以使用完整路径下载文件?我尝试使用完整路径,但出现错误,我不知道这是我做错了什么还是现在应该可以工作。
  • 您可以使用完整路径,但您必须确保该路径上的所有目录都存在。例如,如果您正在写入/tmp/mydir1/local_file,则必须在运行脚本之前创建mydir1,或者在写入之前添加代码以创建目录。
  • 这行得通,我做错了什么...... n00b 错误(我是 n00b) - 我在不存在的路径中添加了一些东西。谢谢大家的帮助!
猜你喜欢
  • 2021-09-22
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多