Download files from an FTP server containing given string using Python(使用 Python 从包含给定字符串的 FTP 服务器下载文件)
问题描述
我正在尝试从 FTP 服务器下载大量共享公共字符串 (DEM) 的文件.这些文件嵌套在多个目录中.例如,Adair/DEM* 和 Adams/DEM*
I'm trying to download a large number of files that all share a common string (DEM) from an FTP sever. These files are nested inside multiple directories. For example, Adair/DEM* and Adams/DEM*
FTP 服务器位于此处:ftp://ftp.igsb.uiowa.edu/gis_library/counties/,不需要用户名和密码.所以,我想遍历每个县并下载包含字符串 DEM 的文件.
The FTP sever is located here: ftp://ftp.igsb.uiowa.edu/gis_library/counties/ and requires no username and password.
So, I'd like to go through each county and download the files containing the string DEM.
我在这里阅读了很多关于 Stack Overflow 的问题和 Python 的文档,但无法弄清楚如何使用 ftplib.FTP() 在没有用户名和密码的情况下进入站点(其中不是必需的),我不知道如何在 ftplib 或 urllib 中 grep 或使用 glob.glob.
I've read many questions here on Stack Overflow and the documentation from Python, but cannot figure out how to use ftplib.FTP() to get into the site without a username and password (which is not required), and I can't figure out how to grep or use glob.glob inside of ftplib or urllib.
提前感谢您的帮助
推荐答案
好的,好像可以了.如果尝试下载目录或扫描文件,可能会出现问题.异常处理可以方便地捕获错误的文件类型并跳过.
Ok, seems to work. There may be issues if trying to download a directory, or scan a file. Exception handling may come handy to trap wrong filetypes and skip.
glob.glob 无法工作,因为您在远程文件系统上,但您可以使用 fnmatch 来匹配名称
glob.glob cannot work since you're on a remote filesystem, but you can use fnmatch to match the names
代码如下:它会下载TEMP目录下所有匹配*DEM*的文件,按目录排序.
Here's the code: it download all files matching *DEM* in TEMP directory, sorting by directory.
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 + " ...
")
#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+" ...
")
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 从包含给定字符串的 FTP 服务器下载文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 Python 从包含给定字符串的 FTP 服务器下载文
基础教程推荐
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- 求两个直方图的卷积 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 包装空间模型 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
