gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:58 24 4
gpt4 key购买 nike

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

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

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

预先感谢您的帮助

最佳答案

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

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()

关于python - 使用 Python 从包含给定字符串的 FTP 服务器下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38943398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com