目录
3. 用os模块的walk方法遍历zipwksp文件夹下zip压缩包
前言
此教程讲解的是:“在一个目录及其子目录中找到所有zip文件,提取它们。然后将其中shp文件复制到与其相对应的地理数据库中。”
一、arcgis pro及arcpy是什么?
ArcGIS Pro是一个桌面GIS应用程序,它由Esri开发和发布。它允许用户创建,编辑,分析和可视化地理空间数据。 ArcGIS Pro与Esri ArcGIS平台的其他组件集成,可以使用ArcGIS Online或ArcGIS Enterprise中存储的数据进行工作。
而arcpy是ArcGIS Pro中的一个Python模块,用于编写Python脚本以自动化执行许多常见的GIS任务。arcpy模块提供了大量的GIS工具箱和功能,可以访问并操作空间数据,包括矢量和栅格数据。使用arcpy,用户可以编写Python脚本来自动执行一系列GIS操作,例如数据处理,地图制作和地理空间分析。
二、操作步骤
1.引入库
import os
from zipfile import ZipFile
import arcpy
2.设置压缩包和数据库地址
zipwksp = r'F:\Arcpy_Data\orgin_code\Python-for-ArcGIS-Pro-main\Chapter4\Chapter4CensusDownloads'
gdbwksp = r'F:\Arcpy_Data\orgin_code\Python-for-ArcGIS-Pro-main\Chapter4\Chapter4'
该处应更换为自己的压缩包文件夹地址以及想存放到的地理数据库地址。
3. 用os模块的walk方法遍历zipwksp文件夹下zip压缩包
zipwalk = os.walk(zipwksp)
for dirpath,dirnames,filenames in zipwalk:
for filename in filenames:
if filename[-4:] == '.zip':
path = os.path.join(dirpath,filename[:-4])
if not os.path.isdir(path):
os.mkdir(path)
with ZipFile(os.path.join(dirpath,filename),'r') as zipObj:
zipObj.extractall(path)
print(f"{filename}已经解压缩到{path}")
其中:
dirpath 是一个字符串,表示当前正在遍历的文件夹的路径。
dirnames 是一个列表,包含当前文件夹下所有子文件夹的名称。
filenames 是一个列表,包含当前文件夹下所有文件的名称。
解压后的文件夹结构:压缩包和解压结果都在zipwksp文件夹下
4.封装地理数据库地址
可以根据shp文件名称中某段内容,编写一个字典以便创建地理数据库时使用。
比如我的shp数据结构为:XX_YYYY_XX_Name.shp,此数据中第二个XX的位置对应表达的是就是唯一的编号,用于识别应该属于哪个数据库。
stateCountry_dict = {
"04" : "Arizona",
"06" : "California",
"16" : "Idaho",
"32" : "Nevada",
"41" : "Oregon",
"53" : "Washington",
"56" : "Wyoming",
"us" : "US_Full",
}
5.生成器对象
shpWalk = arcpy.da.Walk(zipwksp,datatype = "FeatureClass")
其中,第一个参数为强制参数:工作区,即解压缩后的文件夹目录。
datatype:限制返回的数据类型的字符串。这可以设置为多种不同的数据类型以确保找到需要的类型。默认为Any,即所有数据类型。此代码将其设置为FeatureClass,表示只查找shapefile。
6.获取每个shp文件,并复制到相应的数据库中
for dirpath,dirnames,filenames in shpWalk:
for filename in filenames:
fcName = filename[:-4]
censusType = filename.split("_")[2]
fileFullpath = os.path.join(dirpath,filename)
stateCountry = stateCountry_dict[censusType]
print(fileFullpath)
print(censusType)
print(stateCountry)
gdb = os.path.join(gdbwksp,stateCountry+".gdb")
if not arcpy.Exists(gdb):
arcpy.management.CreateFileGDB(gdbwksp,stateCountry)
fcFullPath = os.path.join(gdb,fcName)
arcpy.management.CopyFeatures(fileFullpath,fcFullPath)
print(fileFullpath + "已经被复制到" + gdb)
可以通过打印相关过程信息,查看运行状态。
7.查看最终结果
XX_YYYY_XX_Name.shp,此数据中第二个XX相同的以根据第四步封装的字典放入相应地理数据库中。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了arcpy.da.Walk的使用,而arcpy提供了大量能使我们快速便捷地处理数据的函数和方法,我将慢慢更新。