20-1-第七章 用于地理处理的基本Python模块和包

7.1

这一章介绍了一些模块和包,这些包和模块通常用于支持使用Python的GIS工作,有大量的模块和包存在,这反映了python的流行性和多功能性。这一章是对arcpy的补充,以便更好的进行地理处理。这一章介绍了一些python的内置模块,这些模块在前面的章节中没有介绍,还有几个第三方包。

python标准库包含了大约200个内置模块,包括fileinput、math、os、random、sys和time等,这些模块可以直接import。为了提高向后兼容性,一些模块可能已经被停止更新或弃用,并且有了新的模块实现它的功能,但是仍然能被使用,但是最好不要再应用于新的项目。

除此之外,python package index(PyPI)是一个包含了超过100000个包的在线存储库,可以添加到python安装中。管理这些包的最佳方法是通过conda,arcgis pro和arcgis pro python发行版一起安装,其中包括了PyPI中所有可用软件包中的一小部分。当安装arcgis pro时,这些软件保重只有一部分是默认的arcgispro-py3的一部分,可以使用conda将其他包添加到克隆环境中。如果要使用特定的python包,要是它不是默认环境中的部分,就要使用第六章提到的创建新的conda环境和包的步骤。这一章提到的包都是默认环境的包。

表7.1 总计了第七章涵盖的模块和包,这些包已经被添加到了arcgis pro的默认环境中。
在这里插入图片描述
在这里插入图片描述

7.2 Working with FTP using ftplib

在计算机之间传输文件的最早的协议之一就是file transfer protocol(FTP),FTP是一种传出协议,现在也广泛用于大量数据的传输等,FTP有安全漏洞,但是它也有优点,允许传输文件和文件夹,并保证文件夹的结构。许多的GIS门户已经不再使用FTP,但是也要能够使用FTP。

大多数的FTP站点也可以直接使用WEB浏览器访问,原书提供了一个地址示例:ftp.hillsboroughcounty.org,以ftp开头代替http
在这里插入图片描述
典型的FTP站点包含各种文件夹或目录。使用web浏览器,可以单击这些文件夹来浏览目录结构并找到感兴趣的Ales。对于FTP站点示例,许多感兴趣的GIS数据集位于目录中。
在这里插入图片描述
使用浏览器,可以单击这些文件并将其逐个下载到本地计算机。除了使用web浏览器,您还可以使用FTP客户端软件在FTP站点之间传输文件。受欢迎的应用程序包括FileZilla和SmartFTP。FTP客户端软件使在本地计算机和服务器之间传输整个文件夹变得更容易。

使用Python处理FTP站点是使用ftplib模块完成的,它是标准库的一部分。一个常见的场景是使用脚本下载一个或多个特定的文件,或文件夹中的所有文件内。FTP站点通常用于发布频繁的更新,可以重复运行相同的脚本来获取这些更新。

使用Python中的FTP下载文件需要几个步骤,如下所示:(1)建立到FTP站点的连接,(2)登录到FTP站点,(3)导航到特定的文件夹,(4)检索感兴趣的文件。
使用以下代码行可以完成两个步骤:

import ftplib
server = "ftp.hillsboroughcounty.org"
ftp = ftplib.FTP(server)
ftp.login()

导入 ftplib模块后,通过指定FTP地址创建FTP对象,这个地址不需要添加ftp://,很多时候还要添加用户名和密码,需要以字符串形式作为FTP的参数进行提供,如下所示:

ftp = ftplib.FTP(server, "username", "password")

登录到FTP服务器后,可以浏览内容,使用dir方法检查目录的内容:

ftp.dir()

这个代码在FTP站点的根目录中打印文件夹和文件的列表。
在这里插入图片描述
原书提供的链接应该时已经不能连接,换了科学网络也不行
在这里插入图片描述
根目录通常不包含感兴趣的文件,因此,下一步是使用cwd()方法导航到感兴趣的文件夹,并将子文件夹作为字符串提供:

ftp.cwd("gis/pub/corporate_data")

进入正确的文件夹后,可以使用nlst()方法列出目录中的所有文件:

ftp.nlst()

所有文件会被作为一个列表返回结果:

['Acq_elapp_1000_Buffer.zip', 'Airports.zip', ...]

作为替代,可以使用msd()方法列出所有文件,这种方法提供了更多的控制(包括能够更好地将文件夹与文件分开),但并非所有FTP站点都支持此方法。接下来,必须指定感兴趣的特定文件,FTP对象的returnary()方法获取文件,但要保存文件,必须打开文件的本地副本,然后在检索时写入,如下所示:

filename = "Airports.zip"
localfile = open(filename, "wb")
ftp.retrbinary("RETR " + filename, localfile.write)

参数“wb”表示正在以二进制模式编写文件内容。returnary()方法的第一个参数由一个以RETR开头的字符串组成,后跟一个空格和感兴趣的文件的名称。第二个参数在本地写入文件,returnary()方法用于二进制文件传输,这适用于大多数文件。要使用纯文本文件,要改用retrines()。要重新启动脚本,必须关闭文件的本地副本,并且必须断开与服务器的连接,如下所示:

localfile.close()
ftp.quit()

最后,必须了解下载的文件的最终去向。默认情况下,它们保存到脚本的当前工作目录中,该目录是脚本本身所在的位置。然而,根据您的IDE,它们可能最终位于不同的位置。要控制文件的保存位置,更改脚本中的工作目录,如下所示:

import os
os.chdir(<yourworkspace>)

完整的脚本如下:

import ftplib
import os
os.chdir("C:/Demo/Downloads")
server = "ftp.hillsboroughcounty.org"
ftp = ftplib.FTP(server)
ftp.login()
ftp.cwd("gis/pub/corporate_data")
filename = "Airports.zip"
localfile = open(filename, "wb")
ftp.retrbinary("RETR " + filename, localfile.write)
localfile.close()
ftp.quit()

这个脚本只下载一个文件。要下载更多的文件,要创建一个感兴趣的文件列表,然后在for循环中遍历该列表。在示例脚本中,只有第8–11行必须更改。也可以使用nlst()方法将所有文件下载到文件夹中,以生成所有文件的列表。在这样做之前,您可能需要根据文件的总数及其文件大小检查文件夹的内容,因为FTP站点通常用于托管大型数据集。
对于具有管理权限的用户,ftplib模块提供了其他功能,可以使用mkd()创建新文件夹,使用delete()删除文件,以及使用rename()重命名文件。对于二进制文件,也可以使用storbinary()方法上载文件,对于纯文本文件,可以使用storline()方法。
示例中使用的文件类型由ZIP文件组成,在GIS中很常见。您可以使用ftplib传输任何文件类型,而不仅仅是ZIP。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值