当前位置: 首页 > 面试题库 >

使用Python从包含给定字符串的FTP服务器下载文件

钱安和
2023-03-14
问题内容

我正在尝试DEM从FTP服务器下载大量共享相同字符串()的文件。这些文件嵌套在多个目录中。例如,Adair/DEM*Adams/DEM*

FTP服务器位于此处:ftp://ftp.igsb.uiowa.edu/gis_library/counties/不需要用户名和密码。因此,我想遍历每个县并下载包含string的文件DEM

我在这里已经阅读了有关Python文档的许多问题,但无法弄清楚如何ftplib.FTP()在没有用户名和密码的情况下进入网站(这不是必需的),而且我也无法弄清楚如何grep或glob.glob在ftplib或urllib中使用。

在此先感谢您的帮助


问题答案:

好的,似乎可以工作。如果尝试下载目录或扫描文件,可能会出现问题。异常处理可以很方便地捕获错误的文件类型并跳过。

glob.glob由于您使用的是远程文件系统,因此无法正常工作,但是您可以使用fnmatch来匹配名称

这是代码:它下载*DEM*TEMP目录中匹配的所有文件,并按目录排序。

import ftplib,sys,fnmatch,os

output_root = os.getenv("TEMP")

fc = ftplib.FTP("ftp.igsb.uiowa.edu")
fc.login()
fc.cwd("/gis_library/counties")

root_dirs = fc.nlst()
for l in root_dirs:
    sys.stderr.write(l + " ...\n")
    #print(fc.size(l))
    dir_files = fc.nlst(l)
    local_dir = os.path.join(output_root,l)
    if not os.path.exists(local_dir):
        os.mkdir(local_dir)

    for f in dir_files:
        if fnmatch.fnmatch(f,"*DEM*"):   # cannot use glob.glob
            sys.stderr.write("downloading "+l+"/"+f+" ...\n")
            local_filename = os.path.join(local_dir,f)
            with open(local_filename, 'wb') as fh:
                fc.retrbinary('RETR '+ l + "/" + f, fh.write)

fc.close()


 类似资料:
  • 我正试图下载一些公共数据文件。我通过screensrap获取指向文件的链接,这些文件看起来都是这样的: 我在Requests library网站上找不到任何文档。

  • 我必须从FTP服务器下载最新文件。我知道如何从我的计算机下载最新文件,但我不知道如何从FTP服务器下载。 如何从FTP服务器下载最新文件? 这是我从电脑上下载最新文件的程序 好的,使用此代码我知道最后一个文件的日期,但我如何知道这个文件的名称?????????

  • 我是批处理脚本的新手,遇到了一个问题。我在FTP服务器上的文件夹中有一些文件。文件名如下所示。 我只想下载那些文件名中同时包含20160302和NORMAL的文件。 我已经尝试了两个字符串,例如 这将下载包含20160302或正常的文件。 有什么想法吗? 提前感谢。

  • 我创建了一个web应用程序,它允许其用户从运行应用程序的同一服务器下载文件。然而,我不能让它按照我希望的方式工作,现在我甚至不确定这是否可能。

  • 问题内容: 嗨,我有一堆.mp3文件,我想与NSFileManager一起使用并存储在documents文件夹中。有没有一种方法可以在线下载.mp3文件,然后将其保存到documents文件夹?这就是我正在使用的本地文件。 问题答案: 编辑/更新: Xcode 11.5•Swift 5.2 原始答案 Xcode 8.3.2•Swift 3.1

  • 问题内容: 在我的Java应用程序中,我正在使用以下方法从服务器下载文件。 但是此下载非常慢。我该如何快速? 问题答案: 从Java 7开始,您可以下载具有以下内置功能的文件: 对于早期版本,从Java 1.4到Java 6的解决方案是 此代码将URL内容传输到没有任何第三方库的文件。如果仍然很慢,那您就知道这不是附加库的问题,很可能不是Java的问题。至少您在这里没有什么可以改善的。因此,您应该

  • 问题内容: 我正在使用jsch从服务器下载文件,下面是我的代码。 com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2629) at com.jcraft.jsch.ChannelSftp._get(ChannelSftp.java:977) at com.jcraft.jsch.ChannelSftp.get(Channe

  • 问题内容: 我想从使用安全连接协议HTTPS的服务器下载文件。我可以在普通服务器上进行操作,但是,如何使用HTTPS进行操作。如果有人使用了示例API,请帮助我找到有用的资源。 问题答案: 与Java访问HTTPS URL相同,然后访问HTTP URL。您可以随时使用 但是,当无法验证服务器的证书链时,您可能会遇到一些问题。因此,出于测试目的,您可能需要禁用证书验证并信任所有证书。 为此,请写: