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

2024-06-25 22:42:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从ftp服务器下载大量共享同一字符串('DEM')的文件。这些文件嵌套在多个目录中。例如,“Adair>;DEM*”和“Adams>;DEM*”

FTP服务器位于此处:ftp://ftp.igsb.uiowa.edu/gis_library/counties/,不需要用户名和密码。 所以,我想浏览每个县并下载包含字符串'DEM'的文件

我在这里读了很多关于stack的问题和python的文档,但是不知道如何使用ftplib.FTP文件()在没有用户名和密码的情况下进入网站(这是不需要的),我不知道如何grep或使用环球网在ftplib或urllib中。在

提前谢谢你的帮助


Tags: 文件字符串gt服务器目录密码ftp用户名
1条回答
网友
1楼 · 发布于 2024-06-25 22:42:20

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

glob.glob无法工作,因为您在远程文件系统上,但是您可以使用fnmatch来匹配名称

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

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)
            fh = open(local_filename, 'wb')
            fc.retrbinary('RETR '+ l + "/" + f, fh.write)

fc.close()

相关问题 更多 >