【问题标题】:Python ftplib - uploading multiple files?Python ftplib - 上传多个文件?
【发布时间】:2022-01-02 06:28:05
【问题描述】:

我用谷歌搜索,但我只能找到如何上传一个文件...我正在尝试将所有文​​件从本地目录上传到远程 ftp 目录。任何想法如何实现这一目标?

【问题讨论】:

标签: python ftplib


【解决方案1】:

用循环?

编辑:在一般情况下,仅上传文件如下所示:

import os
for root, dirs, files in os.walk('path/to/local/dir'):
    for fname in files:
        full_fname = os.path.join(root, fname)
        ftp.storbinary('STOR remote/dir' + fname, open(full_fname, 'rb'))

显然,如果您只是像这样保留文件名,则需要注意名称冲突。

【讨论】:

  • 这是将网站上传到主机的脚本......所以假设我在本地硬盘驱动器的某个目录中有网站,我想上传其内容但不上传目录,只有文件所以我的网站上传后将可以从 myaddress.com 而不是 myaddress.com/somedirectory 访问
  • 需要关闭文件吗?
【解决方案2】:

查看Python-scriptlines required to make upload-files from JSON-Call 和下一个FTPlib-operation: why some uploads, but others not?

虽然起始位置与您的问题不同,但在第一个 url 的 Answer 中,您会看到一个示例构造,由 ftplib 上传一个 json 文件和一个 xml 文件:查看 scriptline 024 和进一步。

在第二个网址中,您可以看到与上传更多文件相关的其他方面。

也适用于除 json 和 xml 之外的其他文件类型,显然在定义和实现 FTP_Upload 功能的 2 个最后部分之前具有不同的“条目”。

【讨论】:

    【解决方案3】:

    创建一个 FTP 批处理文件(包含您需要传输的文件列表)。使用python执行ftp.exe,带“-s”选项,传入文件列表。

    这很笨拙,但显然 FTPlib 在其 STOR 命令中不接受多个文件。

    这是一个示例 ftp 批处理文件。

    *

    OPEN inetxxx 
    myuser mypasswd 
    binary 
    prompt off 
    cd ~/my_reg/cronjobs/k_load/incoming 
    mput *.csv 
    bye
    
    • 如果上述内容在一个名为“abc.ftp”的文件中 - 那么我的 ftp 命令将是

      ftp -s abc.ftp

    希望对您有所帮助。

    【讨论】:

    • 我暗示将 myftp.ftp 文件作为“批处理”文件,而不是 MSDOS 特定的“.bat”文件。该文件将包含 ftp 命令列表(而不是特定于操作系统的命令)。例如,这是我的一个 - OPEN inetxxx myuser mypasswd binary prompt off cd ~/my_reg/cronjobs/k_load/incoming mput *.csv bye
    • 这种方式不可移植,Python有自己的ftp客户端,为什么还要使用另一个ftp客户端。对于多个,像 SilentGhost 那样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多