gpt4 book ai didi

python - 如何下载满足一定条件的ftp url?

转载 作者:行者123 更新时间:2023-12-02 09:47:32 25 4
gpt4 key购买 nike

我有一个 ftp 链接,其中包含一些我有兴趣下载的文件的链接:

ftp://lidar.wustl.edu/Phelps_Rolla/

我可以使用以下命令列出所有网址:

import urllib2
import BeautifulSoup

request = urllib2.Request("ftp://lidar.wustl.edu/Phelps_Rolla/")
response = urllib2.urlopen(request)
soup = BeautifulSoup.BeautifulSoup(response)

>>> soup
drwxrwxrwx 1 user group 0 Nov 7 2012 .
drwxrwxrwx 1 user group 0 Nov 7 2012 ..
drwxrwxrwx 1 user group 0 Nov 7 2012 ESRI_Grids
drwxrwxrwx 1 user group 0 Nov 7 2012 ESRI_Shapefiles
drwxrwxrwx 1 user group 0 Nov 7 2012 LAS_Files
-rw-rw-rw- 1 user group 545700 May 27 2011 LiDAR Accuracy Report_Rolla.pdf
drwxrwxrwx 1 user group 0 Nov 7 2012 Rolla Survey
-rw-rw-rw- 1 user group 4865 May 26 2011 Rolla_SEMA_Tile_Index.dbf
-rw-rw-rw- 1 user group 503 May 26 2011 Rolla_SEMA_Tile_Index.prj
-rw-rw-rw- 1 user group 188 May 26 2011 Rolla_SEMA_Tile_Index.sbn
-rw-rw-rw- 1 user group 124 May 26 2011 Rolla_SEMA_Tile_Index.sbx
-rw-rw-rw- 1 user group 1100 May 26 2011 Rolla_SEMA_Tile_Index.shp
-rw-rw-rw- 1 user group 12682 May 31 2011 Rolla_SEMA_Tile_Index.shp.xml
-rw-rw-rw- 1 user group 140 May 26 2011 Rolla_SEMA_Tile_Index.shx

如何只下载包含“Tile”或“tile”且扩展名为“.dbf”、“.prj”、“.shp”和“.shx”的链接?

最佳答案

您正在使用 urllib abd beautiful soup,但是在处理 FTP 专用标准库模块时 ftplib可能是更好的选择。前往文档并阅读如何连接到 FTP 并打开连接和列出目录,那里有简单的步行槽。

下一步是弄清楚如何过滤你的文件,这是一些列表理解过滤字符串到那些里面有一些字符串的问题,例如请参阅this questionthis question 。最后你需要google一下如何通过FTP下载文件,你will find this question 。事实证明,文件下载是通过调用 ftp.retrbinary() 进行的。

这是一个简单的脚本,可以完成我上面提到的所有事情:

from ftplib import FTP

ftp = FTP("lidar.wustl.edu")
ftp.login()
ftp.cwd("Phelps_Rolla")
# list files with ftplib
file_list = ftp.nlst()

for f in file_list:
# apply your filters
if "tile" in f.lower() and any(f.endswith(ext) for ext in ['dbf', 'prj', 'shp', 'shx']):
# download file sending "RETR <name of file>" command
# open(f, "w").write is executed after RETR suceeds and returns file binary data
ftp.retrbinary("RETR {}".format(f), open(f, "wb").write)
print("downloaded {}".format(f))
ftp.quit()

关于python - 如何下载满足一定条件的ftp url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36325500/

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