ArcGIS Pro 中的 Python 入门
设置工程并查看数据集
使用 Python 运行工具
在 Python 窗口中运行代码
获取在 Python 窗口中编写代码的帮助
使用 for 循环进行迭代
创建并遍历要素类列表
在 Python 编辑器中运行脚本
运行 Python 代码的方法比较
想要了解更多?
相关 Esri 培训
<p id="GUID-968F7565-B175-44BC-8E9E-F2B863B53DD6">Python 脚本使自动化 <span class="ph">ArcGIS Pro</span> 中的工作流成为可能。 在本教程中,您将编写代码来确定工作空间中的所有要素类的要素数量。 这也介绍了 Python 语法的一些基础知识。 您将在 <span class="ph">ArcGIS Pro</span> 的 Python 窗口中编写代码。 可以将代码导出到 Python 脚本,该脚本可以在 <span class="ph">ArcGIS Pro</span> 外部打开、修改和运行。</p><p id="GUID-6B3DA3B6-4801-48D1-9C5E-CA627EEC9FD0"><i>本教程上次于 2023 年 11 月 13 日使用 <span class="ph">ArcGIS Pro</span> 3.2 进行了测试。如果您使用的是其他版本的 <span class="ph">ArcGIS Pro</span>,则可能会遇到不同的功能和结果。 </i></p></div>
<div class="requirements" id="requirements"><h4 class="leader-1 trailer-half">要求</h4><ul><li purpose="li" id="LI_B78911E66D9546A8AEAC90D152B57F8D"><span class="ph">ArcGIS Pro</span>(<a class="xref xref" esrisubtype="extrel" hrefpfx="" href="/en/become-a-member/">请参阅软件访问权限选项</a>)</li></ul></div>
<div class="lesson-plan" id="lesson-plan"><h2 class="leader-1">Outline</h2><table class="table-striped"><tbody><tr><td><a href="#ArcGIS Pro %E4%B8%AD%E7%9A%84 Python %E5%85%A5%E9%97%A8"><h5 class="trailer-0">ArcGIS Pro 中的 Python 入门</h5></a><p>学习使用 ArcGIS Pro 中的 Python 的基础知识。</p></td><td><ul class="tpc-duration">30 分钟</ul></td></tr></tbody></table></div>
<section class="section1 padded-anchor" id="subsection-1" purpose="section1"><h2>设置工程并查看数据集</h2><p id="GUID-58B54193-CFA2-4D47-8682-12231A9644E7">在开始编写 <span class="ph">Python</span> 代码前,您将下载数据集、创建新工程,并查看要使用的数据集。</p><section class="wfsteps padded-anchor" purpose="wfsteps"><div class="steps" id="ESRI_STEPS_0217BD30FB5C47D3A6D7562ECD49C791"><ol class="list-numbered" purpose="ol"><li purpose="step" id="ESRI_STEP_6B33DC80779948C1B0A8A0F45D078099"><span purpose="cmd">下载<a target="_blank" class="xref xref" href="https://arcgis.com/sharing/rest/content/items/b2a7ac0eba3344cc9d143e08bd9299f4/data">本教程数据</a>,并将内容提取到 <span class="usertext">C:\</span> 盘文件夹。</span><div class="info" purpose="info"><p id="GUID-9259F3A1-ECA8-4154-A912-56625767FB6F"><span class="usertext">.zip</span> 文件包含名为 <span class="uicontrol">PythonStart</span> 的文件夹。</p><div class="panel trailer-1 note" id="GUID-3AC70394-0067-4892-BE6B-DD4417F88BAE"><h5 class="icon-ui-comment trailer-0">注:</h5><p id="GUID-EC4F32EB-4C2E-4308-9718-15DC4A203A24">可以使用其他文件夹名称,但是在以下步骤中创建工程时需要使用该文件夹。</p></div></div></li><li purpose="step" cid="Fm8yA" id="ESRI_STEP_DBAF8AE6A9A248669DE1C6D530B6BDA8"><span purpose="cmd">启动 <span class="ph">ArcGIS Pro</span>。 如果收到系统提示,请使用您获得许可的 ArcGIS 组织帐户登录。</span><div class="info" purpose="info"><div class="panel trailer-1 note" id="GUID-F3B9402C-DF60-49F7-A573-EC08F821E787"><h5 class="icon-ui-comment trailer-0">注:</h5><p id="GUID-7C080C10-7717-4BFB-A509-5B5E63F0DA59">如果您没有 <span class="ph">ArcGIS Pro</span> 的访问权限或者 ArcGIS 组织帐户,<a class="xref xref" esrisubtype="extrel" hrefpfx="" href="/en/become-a-member/">请参阅软件访问权限选项</a>。</p></div></div></li><li purpose="step" id="ESRI_STEP_1E7EB843D045494BB61C6935E1877B4D"><span purpose="cmd">在<span class="uicontrol">新建工程</span>下,单击<span class="uicontrol">地图</span>。</span><div class="info" purpose="info"><p id="GUID-3A3EE3AE-9FE7-48F2-A8B0-B53F91CA44FE"><img purpose="img" placement="inline" alt="地图模板" title="地图模板" src="GUID-F414E6A4-2785-4C32-B461-C97BC27277B2-web.png" loading="lazy"/></p>
</div></li><li purpose="step" id="ESRI_STEP_1C72EA0B08EE4BA7983D48BD4F382BE3"><span purpose="cmd">在<span class="uicontrol">新建工程</span>窗口中,对于<span class="uicontrol">名称</span>,键入 <span class="usertext">Python Getting Started</span>。 对于<span class="uicontrol">位置</span>,浏览至 <span class="usertext">C:\PythonStart</span> 文件夹。</span></li><li purpose="step" id="ESRI_STEP_3B962FFFA2814894ABEA926906CC1F99"><span purpose="cmd">取消选中<span class="uicontrol">为此工程创建新文件夹</span>复选框。</span><div class="info" purpose="info"><p id="GUID-9107E542-ACA1-472C-9090-041F87A557EA"><img purpose="img" placement="inline" alt="“新建工程”窗口中“为此工程创建新文件夹”选项已取消选中" title="“新建工程”窗口中“为此工程创建新文件夹”选项已取消选中" src="GUID-BD51D016-F162-478D-9493-00DDC9ED2F77-web.png" loading="lazy"/></p>
</div></li><li purpose="step" id="ESRI_STEP_DBD801083EAC4CD2BA3CE5F8A7BC978E"><span purpose="cmd">单击<span class="uicontrol">确定</span>。</span><div class="info" purpose="info"><p id="GUID-3AD89B17-7756-486D-8C72-BEC710B9A047">该工程将打开一个空白地图。</p></div></li><li purpose="step" id="ESRI_STEP_C2A8AAA2DACE42449F9BE818E42D8D96"><span purpose="cmd">如果<span class="uicontrol">目录</span>窗格尚未显示,请单击<span class="uicontrol">视图</span>选项卡,然后单击<span class="uicontrol">目录</span>窗格。</span></li><li purpose="step" id="ESRI_STEP_7B907B61D5094EAF8FF90B5D69D10F02"><span purpose="cmd">将<span class="uicontrol">目录</span>窗格停靠在 <span class="ph">ArcGIS Pro</span> 界面的右侧。</span></li><li purpose="step" id="ESRI_STEP_57A980442C9947079DA935A0EA1D5AF1"><span purpose="cmd">在<span class="uicontrol">目录</span>窗格中,展开<span class="uicontrol">文件夹</span>,然后展开 <span class="uicontrol">PythonStart</span>。</span><div class="info" purpose="info"><p id="GUID-685E90BD-496F-4815-BCAC-97AD7FD6ED81"><img purpose="img" placement="inline" alt="具有六个 shapefile 的 PythonStart 文件夹的目录视图" title="具有六个 shapefile 的 PythonStart 文件夹的目录视图" src="GUID-21F62F72-ADF2-429F-8D58-96EB29FE50F4-web.png" loading="lazy"/></p>
<p id="GUID-7A0E534A-A951-4EEC-BE51-057E29FC18B5">该文件夹包含六个 shapefile。 在本教程中,您将仅使用少数几个数据集,但是相同代码可用于远大于这个数量的数据集。</p><p id="GUID-F12B56BC-673D-4111-907F-FF005676991C">您将首先手动确定单个要素类的要素数量,然后运行工具以获取相同的结果。 在本教程的剩余部分中,您将使用 <span class="ph">Python</span> 确定所有 shapefile 的要素数。</p></div></li><li purpose="step" id="ESRI_STEP_9FB00476696844FEAC9C46888B581A9F"><span purpose="cmd">右键单击 <span class="uicontrol">ambulances.shp</span> shapefile,然后选择<span class="uicontrol">添加至当前地图</span>。</span><div class="info" purpose="info"><p id="GUID-922ECB63-40FA-4C2E-8BC1-10DE150AB0D0">地图缩放至加拿大多伦多,<span class="uicontrol">ambulances</span> 图层的点所在的位置。</p></div></li><li purpose="step" id="ESRI_STEP_17D1266CA74F4051AB6C455FA94A00C1"><span purpose="cmd">在<span class="uicontrol">内容</span>窗格中,右键单击 <span class="uicontrol">ambulances</span> 图层,然后选择<span class="uicontrol">属性表</span>。</span><div class="info" purpose="info"><p id="GUID-ED9D1413-E551-46B6-B198-C5D5EE39F8DE">属性表随即出现。 在表格底部,将显示记录数。</p><p id="GUID-288E6902-3492-48AF-A6AF-0706E9E3A897"><img purpose="img" placement="inline" alt="ambulance shapefile 中要素数量的计数。" title="ambulance shapefile 中要素数量的计数。" src="GUID-61E7E46F-E6ED-4756-B153-8B02276AFAA7-web.png" loading="lazy"/></p><p id="GUID-02DC0AC2-6BFC-4901-989E-C4C832354758">shapefile 包含 48 条记录,这意味着有 48 个唯一要素。 接下来,您将使用工具确定相同的计数。</p></div></li>
<li purpose="step" id="ESRI_STEP_21AC4D7196174AA687D5FEAC9F9E3838"><span purpose="cmd">关闭属性表。</span>
</ol></div></section></section><section class="section1 padded-anchor" id="subsection-2" purpose="section1"><h2>使用 Python 运行工具</h2><p id="GUID-FC95D547-F147-4CC1-A08A-98F3556A53B2">接下来,您将在 <span class="ph">ArcGIS Pro</span> 中运行地理处理工具,然后使用 <span class="ph">Python</span> 代码运行同一工具。</p><section class="wfsteps padded-anchor" purpose="wfsteps"><div class="steps" id="ESRI_STEPS_09400093AE724C03803E6421478BC076"><ol class="list-numbered" purpose="ol"><li purpose="step" id="ESRI_STEP_E0ACDB1C3E4D432BB888D38BEAEEB67A"><span purpose="cmd">在功能区<span class="uicontrol">分析</span>选项卡的<span class="uicontrol">地理处理</span>组中,单击<span class="uicontrol">工具</span>。</span><div class="info" purpose="info"><p id="GUID-D35D02E0-0EF7-4C13-B436-6717BB879C4E"><img purpose="img" placement="inline" alt="“工具”按钮" title="“工具”按钮" src="GUID-16C4239C-5208-403A-BD4A-A7AEA9794E0E-web.png" loading="lazy"/></p><p id="GUID-95A9FF56-753C-4991-A181-52A6E32C2D0E">将出现<span class="uicontrol">地理处理</span>窗格。</p></div></li><li purpose="step" id="ESRI_STEP_AFC23DA2777041939D640BAD5E79820A"><span purpose="cmd">在<span class="uicontrol">地理处理</span>窗格的搜索栏中,输入 <span class="usertext">count</span> 然后按 <span class="shortcut">Enter</span> 键。</span></li><li purpose="step" id="ESRI_STEP_3E3D8F47A4B54A578D697BB66E1F3924"><span purpose="cmd">单击<span class="uicontrol">获取计数</span>工具。</span></li><li purpose="step" id="ESRI_STEP_89EF1329443D4707A3AF0EDE4D603A85"><span purpose="cmd">在<span class="uicontrol">获取计数</span>工具窗格中,对于<span class="uicontrol">输入行</span>参数,选择 <span class="uicontrol">ambulances</span>。</span><div class="info" purpose="info"><p id="GUID-B8F8A488-1E73-4564-80FC-95CDEB05E7C6"><img purpose="img" placement="inline" alt="获取计数工具窗格" title="获取计数工具窗格" src="GUID-EF2FC6D8-C05C-481B-A878-6A4E907DC373-web.png" loading="lazy"/></p>
</div></li><li purpose="step" id="ESRI_STEP_8F9F24CA78164D44A79E8B7A298B57BD"><span purpose="cmd">单击<span class="uicontrol">运行</span>。</span><div class="info" purpose="info"><p id="GUID-BDDF0833-8CFA-4454-8367-466CA6538CC1">工具完成运行后,窗格底部将显示一条消息。</p><p id="GUID-A1666C8C-8598-41F9-8BA0-1EBCD1722B61"><img purpose="img" placement="inline" alt="“获取计数”工具的完成消息" title="“获取计数”工具的完成消息" src="GUID-0260534B-22A0-4938-9773-3A916BFFA7F1-web.png" loading="lazy"/></p>
</div></li><li purpose="step" id="ESRI_STEP_4DF489AC05864FA78DB6EAF34DB55A57"><span purpose="cmd">单击<span class="uicontrol">查看详细信息</span>。</span><div class="info" purpose="info"><p id="GUID-B28815AF-C09F-49CF-B911-1FB6DB0336D2"><span class="uicontrol">获取计数(数据管理工具)</span>窗口随即显示并打开<span class="uicontrol">消息</span>选项卡。</p><p id="GUID-BD349D8F-3C40-4830-8C6E-4BB55FFC828F"><img purpose="img" placement="inline" alt="运行“获取计数”工具时生成的消息" title="运行“获取计数”工具时生成的消息" src="GUID-FF2510CB-BD1C-4CF8-9708-67693417B6C6-web.png" loading="lazy"/></p>
<p id="GUID-5183FAE1-6625-4DC9-BEC2-057AD1A6EF31">消息为 <span class="uicontrol">Row Count = 48</span>,这与您通过打开属性表手动确定的计数相同。 您可以重复这些步骤来确定所有 shapefile 的计数,但是如果您有许多数据集,则此操作将非常耗时。 相反,您将开发一个 <span class="ph">Python</span> 脚本来完成此任务。</p></div></li><li purpose="step" id="ESRI_STEP_BF1D7F4F0B314ADAA8DC751C309F5DEB"><span purpose="cmd">关闭<span class="uicontrol">获取计数</span>窗口。</span><div class="info" purpose="info"><p id="GUID-AC65E0FC-808B-4B22-A6F4-A60EB986CE0F">接下来,您将使用 <span class="ph">Python</span> 运行同一工具。</p></div></li><li purpose="step" id="ESRI_STEP_1EFE4681BA9642E7A3D09A84F070ED6E"><span purpose="cmd">在功能区<span class="uicontrol">分析</span>选项卡的<span class="uicontrol">地理处理</span>组中,单击<span class="uicontrol">历史记录</span>。</span><div class="info" purpose="info"><p id="GUID-7F727304-1ED8-41D1-B4CA-22D64D32C487"><img purpose="img" placement="inline" alt="“分析”选项卡上“地理处理”组中的“历史记录”" title="“分析”选项卡上“地理处理”组中的“历史记录”" src="GUID-2A8962F1-D21A-43D8-BDE9-1597B04C195A-web.png" loading="lazy"/></p><p id="GUID-0EE7DD31-D683-456E-A061-AD9C3553F04B"><span class="uicontrol">历史记录</span>窗格随即显示,其中将列出已运行的工具。 唯一条目是刚刚运行的<span class="uicontrol">获取计数</span>工具。</p><p id="GUID-BFA00366-E615-453C-A2E2-38DD3F778FAE"><img purpose="img" placement="inline" alt="具有一个工具条目的“历史记录”窗格" title="具有一个工具条目的“历史记录”窗格" src="GUID-F167E17F-3711-40E5-AFAB-6643CAA3486A-web.png" loading="lazy"/></p>
</div></li><li purpose="step" id="ESRI_STEP_1D18453B1CD8485284D18DCF49F83343"><span purpose="cmd">在<span class="uicontrol">分析</span>选项卡的<span class="uicontrol">地理处理</span>组中,单击 <span class="uicontrol">Python</span> 按钮的下拉菜单,然后选择 <span class="uicontrol">Python 窗口</span>。</span><div class="info" purpose="info"><p id="GUID-36F05E81-1679-408C-84C1-CB5D0DA48886"><img purpose="img" placement="inline" alt="在“分析”选项卡上选择 Python 窗口" title="在“分析”选项卡上选择 Python 窗口" src="GUID-CD6E9610-EC0E-4F7B-B0A5-CAD209F3DBA0-web.png" loading="lazy"/></p>
<p id="GUID-032B52A7-1D91-49C9-B305-78264D7D250B">随即显示 <span class="uicontrol">Python</span> 窗口。</p><p id="GUID-A5E29145-AE6D-41BD-A315-C0E490DC3FA1"><img purpose="img" placement="inline" alt="带有空脚本和提示符部分的 Python 窗口" title="带有空脚本和提示符部分的 Python 窗口" src="GUID-8C58A6C2-AEEA-46FD-8A50-E2DF456F03A8-web.png" loading="lazy"/></p>
<p id="GUID-52FC3226-3D3D-4448-9530-177A8359AEDB"><span class="uicontrol">Python</span> 窗口的顶部被称为脚本,底部被称为提示符。 脚本最初为空白的。 脚本提供先前输入的代码记录及其结果。</p><p id="GUID-8B05DBC3-EA14-41C4-ABAD-6BD255143982">提示符是您输入代码的地方。 当 <span class="uicontrol">Python</span> 窗口第一次打开时,提示符中的消息显示为<span class="uicontrol">正在初始化 Python 解释程序</span>,这表示该窗口正在准备接收代码。 几秒钟后,消息将被替换为<span class="uicontrol">在此处输入 Python 代码</span>,这表示您可以开始输入代码。 首次打开 <span class="uicontrol">Python</span> 窗口后,这些消息不会在当前会话中再次显示。</p></div></li><li purpose="step" id="ESRI_STEP_A004F96C1B7B4BA692AF1C7470AF3877"><span purpose="cmd">在 <span class="uicontrol">Python</span> 窗口中,键入 <span class="usertext">arcpy.management.GetCount("ambulances")</span>。</span><div class="info" purpose="info"><p id="GUID-B2824594-9E99-4196-BBFE-51F752947D10"><img purpose="img" placement="inline" alt="带有源自“历史记录”窗格的代码的 Python 窗口" title="带有源自“历史记录”窗格的代码的 Python 窗口" src="GUID-50CF4F7A-6E9B-4C54-87F7-7940782AE697-web.png" loading="lazy"/></p>
<p id="GUID-A31D4CBB-F237-4B5A-B160-0C61A286A1CB">ArcPy 是 <span class="ph">Python</span> 包,使得 <span class="ph">ArcGIS Pro</span> 大多数功能可通过 <span class="ph">Python</span> 使用。<span class="usertext">GetCount()</span> 是 ArcPy 的函数,可运行<span class="uicontrol">数据管理工具</span>工具箱中的<span class="uicontrol">获取计数</span>地理处理工具。</p><div class="panel trailer-1 note" id="GUID-850BA35E-47B8-4558-8A6A-F92A24FE4AD9"><h5 class="icon-ui-comment trailer-0">注:</h5><p id="GUID-9DD101FE-9D82-4A5D-8B7A-50D6056DCF3E">如果您访问<a target="_blank" class="xref xref" href="https://pro.arcgis.com/en/pro-app/latest/tool-reference/data-management/get-count.htm">获取计数</a>帮助主题,在<span class="uicontrol">参数</span>下,单击 <span class="uicontrol">Python</span>,您将看到该主题包含一个代码示例。 地理处理工具的所有帮助主题均包括 <span class="ph">Python</span> 示例。</p></div></div></li><li purpose="step" id="ESRI_STEP_BFED665D184649C2BC34E07B36D12EAF"><span purpose="cmd">按 <span class="shortcut">Enter</span> 键</span><div class="info" purpose="info"><p id="GUID-56B2CC76-0FF3-40F2-B371-DAB96D4CEEF8">代码随即运行,结果为 <span class="usertext"><Result '48'></span>。</p>
<p id="GUID-1402604E-05AB-44FA-AA55-8B8B7BA37984">尽管格式略有不同,但这与您先前确定的记录数相同。 在 <span class="uicontrol">Python</span> 窗口中运行代码行,将产生与使用工具窗格运行工具时所得结果相同的结果。 在 <span class="uicontrol">Python</span> 窗口中运行代码将在<span class="uicontrol">历史记录</span>窗格中创建一个新条目。</p><p id="GUID-18CF6E62-A84A-4AA5-AEF2-BB1589ECCB57"><img purpose="img" placement="inline" alt="具有两个工具条目的“历史记录”窗格" title="具有两个工具条目的“历史记录”窗格" src="GUID-453FDC1F-21DD-43FF-9CEC-171F4D259BD4-web.png" loading="lazy"/></p>
<p id="GUID-89968098-6DA1-47F2-B4B6-E6B9A099C130">除了时间戳,这两个条目是相同的,并且使用工具对话框运行工具和使用 <span class="ph">Python</span> 之间没有区别。 但是,在使用 <span class="ph">Python</span> 时,您可以使用代码来控制工具的运行方式,包括在不同的要素类上多次运行同一工具。</p></div></li>
<li purpose="step" id="ESRI_STEP_0574CEF276714C1D8A1303018BB5DE79"><span purpose="cmd">在 <span class="uicontrol">Python</span> 窗口中,右键单击代码,然后选择<span class="uicontrol">清除脚本</span>。</span><div class="info" purpose="info"><p id="GUID-EC25D18B-5E0A-470E-989F-BE04D1353003"><img purpose="img" placement="inline" alt="Python 窗口中的“清除脚本”" title="Python 窗口中的“清除脚本”" src="GUID-EC6950FE-D5B2-4F7E-9881-3CC3CE29A8CD-web.png" loading="lazy"/></p><p id="GUID-B9EFDF31-548D-4290-BDA6-A5D99AC138ED">在之前代码中运行的所有内容都保留在内存中。 在下一部分中,您将从已清空的 <span class="uicontrol">Python</span> 窗口开始操作。</p></div></li></ol></div></section></section><section class="section1 padded-anchor" id="subsection-3" purpose="section1"><h2>在 Python 窗口中运行代码</h2><p id="GUID-55BE7E93-F879-4E7D-9377-1C6542F9ACF7"><span class="uicontrol">Python</span> 窗口是练习编写 <span class="ph">Python</span> 代码的合适位置。 您已经看到可以从<span class="uicontrol">历史记录</span>窗格发送代码,但是通常情况下,您会打开 <span class="uicontrol">Python</span> 窗口并编写自己的代码。</p><section class="wfsteps padded-anchor" purpose="wfsteps"><div class="steps" id="ESRI_STEPS_08068BF0A4814946848892D1F8687E59"><ol class="list-numbered" purpose="ol"><li purpose="step" id="ESRI_STEP_4340808FB527498B942B2231F14A1D1A"><span purpose="cmd">在 <span class="uicontrol">Python</span> 窗口中,单击提示符并输入以下代码行:</span><div class="info" purpose="info"><p id="GUID-18F2AD7F-B1B7-4606-AC97-3E890CCE5826"><span class="usertext">print("GIS is cool")</span></p><p id="GUID-D2E004F4-F22C-490D-BC8B-FA9EB7A56B9E"><img purpose="img" placement="inline" alt="在 Python 窗口提示符处输入的代码行。" title="在 Python 窗口提示符处输入的代码行。" src="GUID-710C173E-BB0C-404B-B643-2DE48AAF8D3B-web.png" loading="lazy"/></p><p id="GUID-C50FBD75-0131-41C5-B388-674571A750CB">在此代码行中,<span class="usertext">print()</span> 是一个函数。 <span class="ph">Python</span> 中的函数用于执行特定的任务。 在这种情况下,该函数用于打印文本。 <span class="ph">Python</span> 中的大多数函数具有参数,参数将在函数后的括号中提供。 在本例中,参数为字符串。 <span class="ph">Python</span> 中的字符串由一系列字符组成。 通过将字符括在一对引号中来创建字符串。</p>
<p id="GUID-D2E1C24B-1D9C-40EC-A26A-EF43B20E2C49"><span class="ph">Python</span> 使用单引号和双引号来标识字符串,两者用法相同。 <span class="usertext">print("GIS is cool")</span> 和 <span class="usertext">print('GIS is cool')</span> 均正确,但是 <span class="usertext">print("GIS is cool')</span> 会导致错误。 <span class="ph">Python</span> 中的引号始终是直引号(而不是弯引号)。 当您在 <span class="uicontrol">Python</span> 窗口或其他编码环境输入编码时,其将被自动格式化。 有时,如果您复制已在文字处理软件中格式化或编写的代码,则直引号可能被会替换为弯引号。 例如,<span class="usertext">print(“GIS is cool”)</span> 会导致错误。</p></div></li><li purpose="step" id="ESRI_STEP_9F713A44C2E44D5081448112224F3D70"><span purpose="cmd">单击代码行的末尾,然后按 <span class="shortcut">Enter</span> 键。</span><div class="info" purpose="info"><p id="GUID-2CC81C75-BF71-4E24-94B1-0A422ED2782F">运行代码行并将其复制到脚本,然后将获取结果。</p><p id="GUID-433DE226-6068-4D36-B0A5-E673BAD78C1C"><img purpose="img" placement="inline" alt="打印到脚本的文本字符串" title="打印到脚本的文本字符串" src="GUID-745E4752-2782-4550-9168-A9F3B2386752-web.png" loading="lazy"/></p>
<p id="GUID-523B8AFF-2B78-4149-93FD-3B0AF42CBDBE">提示符再次为空,准备接收下一代码行。</p><p id="GUID-3AAC006B-7ACE-40FE-BC31-3AC4F6E30A2B">这个示例很简单,但是可以说明以此方式运行 <span class="ph">Python</span> 代码的关键方面。 您编写了单行代码,其中包含要执行的特定指令。 当您按 <span class="shortcut">Enter</span> 键时,将运行代码行,并执行指令。 在此示例中,指令包括屏幕上的打印文本,但是指令还可以包括很多其他任务,如您在上一部分中运行<span class="uicontrol">获取计数</span>工具时所看到的。</p><p id="GUID-62121015-418C-4BF7-A998-E1AE1FDE8DB2">接下来,您将继续练习几个代码行。</p></div></li><li purpose="step" id="ESRI_STEP_BF749EB8D97B419EBA12BCED20EB8D3F"><span purpose="cmd">在提示符处,输入以下代码行:</span><div class="info" purpose="info"><p id="GUID-45F0AE43-6CC6-4F24-A93B-23807E33FA76"><span class="usertext">x = 37</span></p><p id="GUID-2B3C6B25-AE16-49E1-8480-7C3EF433A8DE">在此代码行中,<span class="usertext">x</span> 是一个变量。 变量就像用于存储值的容器。 在此示例中,该值为整数 <span class="usertext">37</span>,但它也可以是其他数字、文本或数据集名称。 由于该变量被分配了一个值,因此代码行被称为赋值。 在变量赋值中使用单个等号表示变量被设置为等于该值。 已分配变量,稍后这些变量可以用于代码。</p></div></li><li purpose="step" id="ESRI_STEP_1D05A840259849EA94007F2A4A9670F9"><span purpose="cmd">在代码行的末尾,按 <span class="shortcut">Enter</span> 键。</span><div class="info" purpose="info"><p id="GUID-A403EB19-9AE4-42A0-9591-95285006938E"><img purpose="img" placement="inline" alt="赋值已移至脚本,而非打印输出" title="赋值已移至脚本,而非打印输出" src="GUID-D970D040-8FD7-4F7E-9ADD-01D7B3510B0F-web.png" loading="lazy"/></p>
<p id="GUID-3776EB99-5551-47C3-B730-0C7113D652B0">代码行已运行,但未打印结果。 该变量被分配了一个值,但是没有其他指令可以执行。</p></div></li><li purpose="step" id="ESRI_STEP_C1F45471D41D43498875B875F2D94D34"><span purpose="cmd">在提示符处,输入以下代码行并按 <span class="shortcut">Enter</span> 键:</span><div class="info" purpose="info"><p id="GUID-E7DEC27E-0843-43D8-819B-6BE9BAB00553"><span class="usertext">y = 73</span></p><p id="GUID-CB13C91B-F6BA-414B-897D-53E17342D069">此行是另一个赋值语句。</p></div></li><li purpose="step" id="ESRI_STEP_2E87C116F2264A6B8D4A61FD5A477311"><span purpose="cmd">在提示符处,输入以下代码行并按 <span class="shortcut">Enter</span> 键:</span><div class="info" purpose="info"><p id="GUID-26DB07D5-C234-4075-AF7A-7A509CF5CB87"><span class="usertext">x * y</span></p><p id="GUID-975945B6-8D6F-43D0-AFBF-589518048279">此行将执行计算,在此情况下,会将 <span class="usertext">x</span> 和 <span class="usertext">y</span> 的值相乘。 结果打印如下。</p><p id="GUID-821F8EC8-EE25-4E23-B14F-462A8311B1D9"><img purpose="img" placement="inline" alt="计算结果打印到脚本" title="计算结果打印到脚本" src="GUID-1C47CBC3-04CB-4328-AE9E-BA0A8C818292-web.png" loading="lazy"/></p>
<p id="GUID-EF1C3257-021F-4E22-8E13-D0327EF9C8B8">到目前为止,您已输入代码行,而并未因为每行的确切编写方式而过于担心。 使用赋值语句时,空格为可选项。 因此,<span class="usertext">x = 37</span> 与 <span class="usertext">x=37</span> 相同。 通常情况下,会添加空格以提高可读性。</p></div></li><li purpose="step" id="ESRI_STEP_830F0655BF5440EA9C60F4518295AE9A"><span purpose="cmd">在提示符处,输入以下代码行并按 <span class="shortcut">Enter</span> 键:</span><div class="info" purpose="info"><p id="GUID-584A4E3B-BB7E-4430-A082-8236BC9E316D"><span class="usertext">X * y</span></p><p id="GUID-06D945DE-1BE4-4A0D-9E89-6BB7B820CB3F">此结果为错误:</p><p id="GUID-8427FFC4-D495-4EAA-BEA5-A3F5015478E3"><span class="usertext">NameError: name 'X' is not defined.</span></p><p id="GUID-F6B50E10-94F8-4606-88DA-5E3AD79D65E8"><img purpose="img" placement="inline" alt="使用大写 X 导致的错误" title="使用大写 X 导致的错误" src="GUID-4649DADF-36E9-4297-AB9C-B66F98849E5C-web.png" loading="lazy"/></p>
<p id="GUID-E2002158-0974-4CA3-83CF-6073A4AEA9C7"><span class="ph">Python</span> 区分大小写,因此 <span class="usertext">X</span> 与 <span class="usertext">x</span> 不同。 通过分配值 37,您已定义 <span class="usertext">x</span>,但是大写 <span class="usertext">X</span> 并未被分配值,因此出错。</p><p id="GUID-44067CCA-7A69-454A-8BE2-3CB44894A840">当您在 <span class="uicontrol">Python</span> 窗口中继续运行代码行时,先前运行的所有代码及其结果将显示在脚本中。 您可以清除脚本,但这不会清除已分配的任何变量的值,重新启动您的 <span class="ph">ArcGIS Pro</span> 会话可以将其清除。</p></div></li><li purpose="step" id="ESRI_STEP_47F955FAF103438B9016512C8CFA8044"><span purpose="cmd">右键单击脚本,然后单击<span class="uicontrol">清除脚本</span>。</span><div class="info" purpose="info"><p id="GUID-37AE3C27-0362-4925-8A53-9BEDC3021063">接下来,考虑一个更实用的示例:华氏温度 (F) 和摄氏温度 (C) 之间的转换。 通用公式为:</p><p id="GUID-1BD9D2DF-7F62-47B2-9F56-449D6F4C83C5">F = 9/5 * C + 32</p><p id="GUID-AC977ACA-A269-43D0-808A-059C26378CF5">其可以在 <span class="ph">Python</span> 中编写为简单计算。</p></div></li><li purpose="step" id="ESRI_STEP_CACA0E9362434925A22337AA9315F3B8"><span purpose="cmd">在提示符处,输入以下代码行并在行末尾处按 <span class="shortcut">Enter</span> 键:</span><div class="info" purpose="info"><p id="GUID-AECD8E6D-7AFD-4482-BE75-8BAF61853790"><span class="usertext">temp_c = 17</span></p><p id="GUID-051871FC-B36E-4614-A0C7-F9F29AA61F28"><span class="usertext">temp_f = temp_c * 9 / 5 + 32</span></p><p id="GUID-7CDA5F92-02A2-4238-ACD3-FAD91D6B4340"><span class="usertext">print(temp_f)</span></p><p id="GUID-082250EB-5833-4DCD-8F36-A0A2473F8E8F">将打印结算结果。</p><p id="GUID-03EBDDE8-0308-424E-B166-1F9C8CA8FBF4"><img purpose="img" placement="inline" alt="打印温度的计算值。" title="打印温度的计算值。" src="GUID-86583BE4-FCC3-4E75-886B-1560219F2CE2-web.png" loading="lazy"/></p>
<p id="GUID-DD9ECB11-3AC9-4D25-AF8C-158AE355D44E">将对此脚本进行详细分析。</p><p id="GUID-44E87BD0-7B32-49F5-B060-D4F60E7AC64A">代码的第一行将数字值分配给变量 <span class="usertext">temp_c</span>。 第二行使用变量 <span class="usertext">temp_c</span> 执行计算,并将结果分配给新变量 <span class="usertext">temp_f</span>。 第三行打印变量 <span class="usertext">temp_f</span> 的值。 第三行也可以写成 <span class="usertext">temp_f</span>,但通常会使用 <span class="usertext">print()</span> 函数,因为它提供了更好的格式化选项。</p><p id="GUID-73D72DF8-87EC-4E41-BD4B-3F926FF64867">不使用变量也可以获得相同的结果。</p></div></li><li purpose="step" id="ESRI_STEP_B652E70A70444288B534031B47FE51DB"><span purpose="cmd">在提示符处,输入以下代码行并按 <span class="shortcut">Enter</span> 键:</span><div class="info" purpose="info"><p id="GUID-128A47B8-5DE9-4266-B0B2-3FA737B11DEA"><span class="usertext">17 * 9 / 5 + 32</span></p><p id="GUID-4E10F9D4-D316-4F71-8BC8-416CBADE568B">结果也为 62.6。</p><p id="GUID-D6010D76-9ADC-4FAF-B3C8-A6756351DCB2">有一些使用变量的充分理由。 首先,在很多情况下,您不想对单个值执行计算,而是需要对多个值执行计算。 其次,通常您需要编写代码来执行计算,但是您事先并不知道要使用的值。 将计算写为两个变量之间的关系时,可以重用计算,并且它不依赖于单个值。</p></div></li></ol></div></section></section><section class="section1 padded-anchor" id="subsection-4" purpose="section1"><h2>获取在 Python 窗口中编写代码的帮助</h2><p id="GUID-6E51BCF9-CB8A-4B51-A0C9-856113790269"><span class="uicontrol">Python</span> 窗口包含多个功能,可帮助您编写代码。 请考虑先前使用 <span class="usertext">print()</span> 函数的示例。</p><section class="wfsteps padded-anchor" purpose="wfsteps"><div class="steps" id="ESRI_STEPS_F0FBF31DAFC24D9AB7B35AAA34F4C52D"><ol class="list-numbered" purpose="ol"><li purpose="step" id="ESRI_STEP_B0E1B5429F6645FC81EC694646DD0794"><span purpose="cmd">清除脚本。</span></li><li purpose="step" id="ESRI_STEP_E7074F5216584A58BD1E05CF4F7CFE8C"><span purpose="cmd">在提示符处,输入以下代码:</span><div class="info" purpose="info"><p id="GUID-AC03FA68-7028-45C0-A8F8-9CFCB83BD161"><span class="usertext">pri</span></p><p id="GUID-BE8CC42E-AD95-40CB-8294-5189B40A0357">即使在您完成输入打印之前,仍会显示一个包含 <span class="usertext">print()</span> 函数的弹出窗口。 带有字母 F 的蓝色图标表示此功能。 这称为自动完成或代码完成。</p><p id="GUID-2BC975B2-6DB0-4D93-AA44-E48045C21332"><img purpose="img" placement="inline" alt="print() 函数的弹出窗口" title="print() 函数的弹出窗口" src="GUID-3FF89396-6050-4089-9D2C-4A81116C5D4D-web.png" loading="lazy"/></p>
</div></li><li purpose="step" id="ESRI_STEP_FAC54EDBB4484625B1C061F4033793A0"><span purpose="cmd">指向 <span class="usertext">print()</span> 弹出窗口。</span><div class="info" purpose="info"><p id="GUID-F7ED496E-D60B-48A9-BBA7-6767E3CA6287">这将显示该函数的语法帮助。</p><p id="GUID-0D888A69-3438-4C9E-9DF2-524EE8CEC60C"><img purpose="img" placement="inline" alt="print() 函数的语法" title="print() 函数的语法" src="GUID-A4A63DD3-E3CB-4B77-BA1B-D61BBB90B125-web.png" loading="lazy"/></p><p id="GUID-35EFC484-DAB9-42E1-9430-10F0D2D043DE"><span class="usertext">print()</span> 函数的帮助提供了有关其所用参数及其排序的信息。</p>
<p id="GUID-1BE0B63F-85B4-4EDD-9A3B-2064A4B3C751">您可以继续输入,也可以单击弹出窗口来自动完成此代码段。</p></div></li><li purpose="step" id="ESRI_STEP_877A7038B3D345159BF50D326FBCC823"><span purpose="cmd">单击 <span class="usertext">print()</span> 弹出窗口。</span><div class="info" purpose="info"><p id="GUID-27176794-CAD4-4F8B-9033-5ECE705B4E95">现在,<span class="usertext">print()</span> 函数将显示在提示符中。 请注意,已自动添加一对括号。 如果您没有单击弹出窗口,而是继续输入,请在键入 <span class="usertext">print(</span> 后,会自动添加一个右括号。 这是代码完成的另一个示例,可帮助您编写正确的语法。</p><p id="GUID-6F709B2C-DAA0-4B11-B1E1-1F8F7BE54F65">当光标位于括号内时,该函数的语法帮助将再次显示。</p></div></li><li purpose="step" id="ESRI_STEP_EF80CF512AD64FAA85FA0A181B623578"><span purpose="cmd">在 <span class="usertext">print()</span> 函数的括号中输入一个引号。</span><div class="info" purpose="info"><p id="GUID-34FC102A-6DAD-4B2A-9CDA-1E167C521088">将自动添加第二个引号。</p><p id="GUID-EB2AD70B-23FA-461B-A07F-9155F4F2BDF4"><img purpose="img" placement="inline" alt="print() 函数参数的引号" title="print() 函数参数的引号" src="GUID-D7B96991-42D2-49B7-BB8D-EE33428EDBB8-web.png" loading="lazy"/></p>
<p id="GUID-195E5114-8F85-4FB2-9B73-E57142B2BACC"><span class="uicontrol">Python</span> 窗口提供自动完成弹出窗口、语法帮助的交互式显示以及与语法错误相关的提示。</p></div></li><li purpose="step" id="ESRI_STEP_32AEEDE2AEEF405B8D0FC2EAEA1ACA67"><span purpose="cmd">在提示符处删除代码。</span></li><li purpose="step" id="ESRI_STEP_0238876F52C84C4BAB620C123FF8D357"><span purpose="cmd">确保活动地图仍包含名为 <span class="uicontrol">ambulances</span> 的要素图层。</span></li><li purpose="step" id="ESRI_STEP_A5B1A0D0FEC843A692CBD87E275F1528"><span purpose="cmd">在提示符处,输入以下代码:</span><div class="info" purpose="info"><p id="GUID-3A737B2B-028E-4970-8CEA-2FFC4320EA60"><span class="usertext">arc</span></p><p id="GUID-59B4155A-58C7-422C-A6AE-16226AB61F36">随即显示包含 ArcPy 包的弹出窗口,使用带有字母 P 的红色图标表示。</p><p id="GUID-8B481E55-3200-47D5-B9C5-67826F822554">包是一种扩展 <span class="ph">Python</span> 代码核心组的方法。 ArcPy 包用于将 ArcGIS 功能添加到 <span class="ph">Python</span>。</p></div></li><li purpose="step" id="ESRI_STEP_498930B3B8AA4B56B65EFC85884E486F"><span purpose="cmd">单击 <span class="usertext">arcpy</span> 弹出窗口。</span><div class="info" purpose="info"><p id="GUID-8C90A749-63A3-424E-A3CB-EF5B4AA1078C">现在,arcpy 软件包将显示在提示符处,后跟一个点。 对于非常短的代码段(例如本示例),可以很快地输入所有字符,因此单击弹出窗口不会节省太多时间。 但是,对于较长的代码元素,使用代码完成功能可以节省时间、避免输入错误并提供语法帮助。</p></div></li><li purpose="step" id="ESRI_STEP_CCB9A05C26254805994AA9C5CFEE42A7"><span purpose="cmd">在 <span class="usertext">arcpy.</span> 后,按以下方式输入 <span class="usertext">Get</span>:</span><div class="info" purpose="info"><p id="GUID-2248BDFF-DA12-4F2B-8E7A-858BE11910CA"><span class="usertext">arcpy.Get</span></p><p id="GUID-5FE9D291-3866-4211-AA3D-98A1096E579E">将显示在 <span class="usertext">arcpy</span> 后以 <span class="arcpyref">Get</span> 开头的代码元素列表。</p><p id="GUID-1C75EF7E-BDEA-465F-81EE-A21299397236"><img purpose="img" placement="inline" alt="以 arcpy.Get 开头的代码元素的弹出窗口" title="以 arcpy.Get 开头的代码元素的弹出窗口" src="GUID-F778772C-57A7-4910-9F17-FC9367DA0317-web.png" loading="lazy"/></p>
<p id="GUID-18F3E0F2-3F5E-4DC6-A135-67895D28D3ED">代码完成是上下文相关的。 例如,如果您在代码行开始位置开始输入 <span class="usertext">Get</span>(而非 <span class="usertext">arcpy.</span>),则显示的选项与 <span class="usertext">arcpy.Get</span> 会非常不同。</p></div></li><li purpose="step" id="ESRI_STEP_A2ADBAED388B445B9383024C45BFF1F8"><span purpose="cmd">在选项列表中单击 <span class="uicontrol">GetCount()management</span>。</span><div class="info" purpose="info"><div class="panel trailer-1 note" id="GUID-A72D455A-81F6-4F99-B52F-F648A72D06E1"><h5 class="icon-ui-comment trailer-0">注:</h5><p id="GUID-60A278D4-7B43-40BE-A88A-A137A2E816DA"><span class="usertext">GetCount()</span> 后的单词 <span class="uicontrol">management</span> 表示 <span class="usertext">GetCount()</span> 为<span class="uicontrol">管理</span>工具的一部分。</p></div><p id="GUID-B18E1F0C-DF2D-4DE1-ADC3-2A4D5383C0E6">将使用以下代码填充提示符:</p><p id="GUID-9D42F8C9-5ADF-42C3-8897-4BF9EB52C4AE"><span class="usertext">arcpy.management.GetCount()</span></p><p id="GUID-ACBED38C-E98A-4A9F-8F02-3AED1E0E2CDF">这与在本教程前面部分中使用的代码相同,其中 <span class="usertext">management</span> 表示<span class="uicontrol">数据管理工具</span>工具箱,而 <span class="usertext">GetCount()</span> 表示<span class="uicontrol">获取计数</span>工具。</p><p id="GUID-10A75837-FA84-457D-8315-086ACCC7CF8F">将光标放在括号之间时,将显示两个弹出窗口。</p><p id="GUID-E0ABE1C4-E397-4F05-BF5C-835C9ABDD70F"><img purpose="img" placement="inline" alt="GetCount 语法" title="GetCount 语法" src="GUID-EAF4FB4F-C102-4421-9C75-CC10B9CB5B4E-web.png" loading="lazy"/></p>
<p id="GUID-C077E2BB-631B-4E54-958F-EDB8BDA1DB16">下方的弹出窗口显示<span class="uicontrol">获取计数</span>工具的语法。 语法显示唯一参数名为 <span class="uicontrol">in_rows</span>,它由输入表视图或栅格图层组成。 上方的弹出窗口显示活动地图中 ambulances 图层的名称。 这是<span class="uicontrol">获取计数</span>工具 <span class="uicontrol">in_rows</span> 参数的代码完成提示。 换句话说,<span class="uicontrol">Python</span> 窗口可以识别出活动地图中的图层是工具的有效参数。 您可以选择使用此图层或输入其他内容。</p></div></li><li purpose="step" id="ESRI_STEP_EFC21F70FE154C6FA4EBB8A20A1775AC"><span purpose="cmd">单击 <span class="usertext">ambulances</span> 弹出窗口。</span><div class="info" purpose="info"><p id="GUID-D7C69C0F-168D-4699-9CA4-528C440820CF">将使用以下代码填充提示符:</p><p id="GUID-DCB8D3A5-6C08-4064-81FA-3D452CEAC959"><span class="usertext">arcpy.management.GetCount('ambulances')</span></p><p id="GUID-7A4DEB6F-2798-4844-BD15-4781526B0261">在本情况中,代码完成功能会在图层名称的周围自动添加一对引号。 <span class="uicontrol">Python</span> 窗口中的代码完成是学习正确语法的好方法。 虽然代码完成会添加单引号,但您也可以在此处使用双引号。</p><p id="GUID-A70AD968-15F4-4E41-B7B9-18E70B2DF390">无需运行此代码,因为它与您之前运行的代码相同。</p></div></li><li purpose="step" id="ESRI_STEP_253D7CF65FF04CFB85B5DFB6DE8C355B"><span purpose="cmd">在提示符处删除代码。</span></li></ol></div></section></section><section class="section1 padded-anchor" id="subsection-5" purpose="section1"><h2>使用 for 循环进行迭代</h2><p id="GUID-689BF184-1AD7-4837-919C-B6D4A1E9399C">接下来,您将尝试迭代,即多次重复相同的步骤。 您将创建一个值列表,并对列表的每个元素执行相同的计算。</p><section class="wfsteps padded-anchor" purpose="wfsteps"><div class="steps" id="ESRI_STEPS_1DFE52A8EF0C45B4A00063C743E2E3EC"><ol class="list-numbered" purpose="ol">
<li purpose="step" id="ESRI_STEP_62FD37A80ED4492C8DB8056EB35D7152"><span purpose="cmd">在提示符处,输入以下代码行并按 <span class="shortcut">Enter</span> 键:</span><div class="info" purpose="info"><p id="GUID-75E396E6-711E-4474-9474-E7CF022691F2"><span class="usertext">templist_c = [17, 19, 24, 21, 16]</span></p><p id="GUID-840E4849-E676-4BD6-B3DC-F157E44D47DD">此代码将创建一个 <span class="ph">Python</span> 列表,其中包含五个相同类型的元素。在本情况下,它们是摄氏温度值。 列表是 <span class="ph">Python</span> 中非常常见的数据类型。 列表由一系列由括号 [] 包围的元素组成,这些括号有时称为方括号,并且这些元素之间使用逗号分隔。</p></div></li><li purpose="step" id="ESRI_STEP_120544CE5A534A4DB3E7A41C01E39EEC"><span purpose="cmd">在提示符处,输入以下代码行并按 <span class="shortcut">Enter</span> 键:</span><div class="info" purpose="info"><p id="GUID-20AA1EC6-18AD-44F5-9DA3-48CA61CFCF19"><span class="usertext">for temp_c in templist_c:</span></p><p id="GUID-45CD8AD5-3A58-4A5D-948A-7E34C9ED0343"><img purpose="img" placement="inline" alt="在 Python 窗口中输入 for 循环代码后的提示符。" title="在 Python 窗口中输入 for 循环代码后的提示符。" src="GUID-08E3F458-B084-40A4-B937-BBB5D3527314-web.png" loading="lazy"/></p><p id="GUID-D63C6C97-B67D-46AB-B4D1-0B0858C4BCCC">当在代码行末尾按 <span class="shortcut">Enter</span> 键时,该代码不会运行,但提示符将移至下一行。 代码行以冒号结尾,这表示将要跟随更多代码,并且代码行本身不能单独运行。</p><p id="GUID-5B5D0A1B-7581-4B33-8336-3FA9002C176E">代码行是 <span class="usertext">for</span> 循环的起点,具有以下一般结构:</p><p id="GUID-1080323D-64F3-461F-876C-6AC6069E6582">for <element> in <list>:</p><p id="GUID-1B4EBDE0-0AB7-4419-8DEC-02E7BE7EE595"><execute one or more lines of code></p><p id="GUID-A2805CE9-D144-4F8E-9DA3-9E66AD0AC467"><span class="usertext">for</span> 循环允许您遍历现有列表的元素,并对每个元素重复相同的步骤。 包含 <span class="usertext">for</span> 关键字的代码行以冒号结尾。 下一行代码将缩进,并且后续同样缩进的所有代码行将在每次迭代中运行。 重复的代码块可以通过缩进来识别。</p><p id="GUID-A695D257-DE4F-4A0A-BEFD-396E5D427C7A">由于使用冒号,<span class="uicontrol">Python</span> 窗口可以识别 <span class="usertext">for</span> 循环,因此下一代码行将缩进。</p></div></li><li purpose="step" id="ESRI_STEP_3069776B699146C6898BA09F86494F03"><span purpose="cmd">在提示符处,输入以下代码行并按 <span class="shortcut">Enter</span> 键:</span><div class="info" purpose="info"><p id="GUID-636A3EA2-7A1F-4035-9182-2A3560AEF231"><span class="usertext">temp_f = temp_c * 9 / 5 + 32</span></p><p id="GUID-04C9A2B9-5CD3-46E2-ABFA-E97093EE0D67">此代码应缩进。 如果不慎删除了缩进,则可以在开始出添加四个空格来缩进此行。 四个空格是代码块的默认缩进级别。</p></div></li><li purpose="step" id="ESRI_STEP_B6ACD733A9274F0B9777E3FCFF8955E2"><span purpose="cmd">在提示符处,输入以下代码行并按 <span class="shortcut">Enter</span> 键:</span><div class="info" purpose="info"><p id="GUID-0BDDB003-1E3D-40B9-AE91-AC5936CFE0B9"><span class="usertext">print(temp_f)</span></p><p id="GUID-D899AEA4-82E0-4D01-95C0-841E8CFB4E98">此处无需使用 <span class="usertext">print()</span>,但是在许多情况下,它可以改善格式。</p><p id="GUID-07EDDCD9-61E9-431B-9A31-5C3B6E802E31">现在,<span class="uicontrol">Python</span> 窗口的外观如下:</p><p id="GUID-20FE901B-63C3-4AFC-80A0-3D409DAF4413"><img purpose="img" placement="inline" alt="执行前在提示符部分中的 for 循环" title="执行前在提示符部分中的 for 循环" src="GUID-3226EB56-71D2-42E7-A190-B3C7B9900A27-web.png" loading="lazy"/></p>
<p id="GUID-87A90F67-2562-4814-A97A-C7E641DC130D"><span class="usertext">for</span> 循环已完成并可以执行。</p></div></li><li purpose="step" id="ESRI_STEP_9C776095FE1F47348B0754E07D2DF6CB"><span purpose="cmd">将光标停留在代码的空行上,按 <span class="shortcut">Enter</span> 键。</span><div class="info" purpose="info"><p id="GUID-34FDA876-7E01-45E2-B27D-7F96E6062C84">结果打印:</p><p id="GUID-3CCCD869-DE0F-42D3-92B8-AB1111AD31A7"><img purpose="img" placement="inline" alt="打印计算所得温度值。" title="打印计算所得温度值。" src="GUID-2E36245A-0FF8-462C-98A4-A1DE239B006E-web.png" loading="lazy"/></p><p id="GUID-AEFDDC5C-AAF6-4CE0-A87B-AA90A01C3AF5"><span class="usertext">for</span> 循环遍历列表中的所有元素并执行相同的计算。 这是编程中十分强大的功能,因为无论列表包含 5 个元素还是 5000 个元素,编写代码的工作量都是相同的。</p></div></li></ol></div></section></section><section class="section1 padded-anchor" id="subsection-6" purpose="section1"><h2>创建并遍历要素类列表</h2><p id="GUID-C96FA910-953D-4EBF-87A6-8570C665FCED">在 <span class="uicontrol">Python</span> 窗口中练习编写和运行代码后,您将返回到确定感兴趣文件夹中每个要素类的要素数量的原始任务。</p><p id="GUID-CA3BB557-C768-4514-813E-19C8496D833A">您将再次使用<span class="uicontrol">获取计数</span>工具。 确保活动地图仍包含名为 <span class="uicontrol">ambulances</span> 的要素图层。</p><section class="wfsteps padded-anchor" purpose="wfsteps"><div class="steps" id="ESRI_STEPS_A273AE6AA7D446E6A13770B9372177DC"><ol class="list-numbered" purpose="ol"><li purpose="step" id="ESRI_STEP_CC3BD42774A84E4C8A656371EF99FC6D"><span purpose="cmd">清除脚本。</span></li><li purpose="step" id="ESRI_STEP_A6D8E5AAA64440A99EF9ADEB47F9B619"><span purpose="cmd">运行以下代码行:</span><div class="info" purpose="info"><p id="GUID-E4C18015-FF7A-4225-8B0D-3D9F728C9144"><span class="usertext">count = arcpy.management.GetCount("ambulances")</span></p><p id="GUID-5884964A-78A4-4DAA-A030-0244B77C5D64"><span class="usertext">print(count)</span></p><p id="GUID-20F1021D-F82D-4CE8-A8B5-F4D91804A680">结果是值 48。 该代码与您在本教程前面部分中运行的代码几乎相同,但是现在<span class="uicontrol">获取计数</span>工具的结果已分配给变量。 即使目前唯一要做的就是打印其值,但这仍使处理结果变得更加容易。</p><p id="GUID-A565FCAA-93EF-40EE-A6B0-51418DBC8916">到目前为止,该代码使用了在活动地图中打开的要素图层的名称。 尽管这很方便,但是必须将所有 shapefile 添加到地图并为每个要素图层手动运行代码并不实际。 相反,您可以通过指定完整路径来指向磁盘上的要素类。</p></div></li><li purpose="step" id="ESRI_STEP_3DEA7C2244AD4A84BD4A8F450CDCD0B1"><span purpose="cmd">运行以下代码行:</span><div class="info" purpose="info"><p id="GUID-62D357BF-E46F-4777-94AA-94AC9287D7C6"><span class="usertext">count = arcpy.management.GetCount("C:/PythonStart/ambulances.shp")</span></p><p id="GUID-664E8DDD-CF03-410C-8DBA-BBE99D334BFD"><span class="usertext">print(count)</span></p><p id="GUID-7BCD92D2-4393-42B5-87A8-47B464483E04">打印相同的结果。</p><div class="panel trailer-1 note" id="GUID-CF1B0457-91A5-41BB-84D1-5109FABBED9A"><h5 class="icon-ui-comment trailer-0">注:</h5><p id="GUID-41516DD4-7C5D-4B65-ADDB-55EB4A8428EB">如果您将 <span class="uicontrol">PythonStart</span> 文件夹保存至计算机上的另一个位置,则需要相应地更新路径。</p></div><p id="GUID-C1D01EAB-1860-44EE-9159-6706AF4FBA02">关于路径的使用,有一些注意事项。 首先,如果将数据提取到另一个文件夹,则需要修改此路径。 其次,由于该路径为字符串,将在两侧使用引号。 另请注意,路径中使用正斜杠 (/) 代替常规反斜杠 (\)。 <span class="ph">Python</span> 中的反斜杠用作转义字符,这可能会改变其后的字符含义。 在字符串中使用反斜杠时,可能会导致意外的结果。 第三,由于 <span class="usertext">.shp</span> 文件扩展名为名称的一部分,因此要素类名为 <span class="usertext">ambulances.shp</span>。 仅使用 ambulances 会返回错误,因为文件夹中没有名为 ambulances 的要素类。</p><p id="GUID-6E25EC60-A9DE-43F8-99EF-8EFB5C25B1A0">您可以设置工作空间,而不是指定完整路径。 工作空间是影响地理处理操作的几种环境设置之一。 除了工作空间之外,环境还包括默认的输出坐标系、用于栅格数据处理的默认像元大小等。</p></div></li><li purpose="step" id="ESRI_STEP_D0666FBA2A0845239153CE0877159437"><span purpose="cmd">运行以下代码行:</span><div class="info" purpose="info"><p id="GUID-EFEA7799-3077-4A5E-8247-7746620F3A2D"><span class="usertext">arcpy.env.workspace = "C:/PythonStart"</span></p><p id="GUID-561B3633-C028-41BA-9B4A-DCBF576565F3"><span class="usertext">count = arcpy.management.GetCount("ambulances.shp")</span></p><p id="GUID-F4ACAF4D-EEDB-4F30-8E1B-156BD911363A"><span class="usertext">print(count)</span></p><p id="GUID-99EE0F8F-2D85-4EE8-B3A0-EFE97E6B42CA">打印相同的结果。</p><p id="GUID-9FBF5FD0-9AAF-4F40-BBA7-748C8BEDCFFA">尽管设置工作空间需要一个额外的代码行,但是使用工作空间通常是有效的,因为所有随后的 ArcPy 代码行都会自动使用它。 第二行代码不再需要完整路径。 如果代码中未设置工作控件,则将使用工程的默认工作控件。</p><p id="GUID-D24DFC5A-F9B6-49CC-8C0F-6A72E3C408CC">完成确定文件夹中每个要素类的要素数量的原始任务的最后一步是:添加代码以在工作空间中创建 shapefile 列表,然后在该列表的每个元素上运行<span class="uicontrol">获取计数</span>工具。 设置工作空间后,您可以使用 ArcPy 函数在此工作空间中创建要素类列表。</p></div></li><li purpose="step" id="ESRI_STEP_EBB3CE172B244767B49BD7FB5342D804"><span purpose="cmd">输入以下代码行并按 <span class="shortcut">Enter</span> 键:</span><div class="info" purpose="info"><p id="GUID-86144431-E0AF-4C83-A359-AD0253DC8C20"><span class="usertext">fc_list = arcpy.ListFeatureClasses()</span></p><p id="GUID-CBC9ADAD-EB41-4366-AC63-D77646A462E6"><span class="usertext">ListFeatureClasses()</span> 函数将创建要素类列表。 通过将其分配给变量,您可以在其他任务中使用该列表。</p><p id="GUID-BF64E3F8-D886-4809-9311-152A6989117F">要检查列表的内容,可以打印其值。</p></div></li><li purpose="step" id="ESRI_STEP_7ED7B6AEB19940B8865668F4BDCFA70B"><span purpose="cmd">运行以下代码行:</span><div class="info" purpose="info"><p id="GUID-C8CA4205-97D3-441B-B971-44C704D8080B"><span class="usertext">print(fc_list)</span></p><p id="GUID-DA81F785-1748-4389-8881-1F46A8AF6E0E">结果为:</p><p id="GUID-8554DEBD-9DBC-4E7E-AEEF-2397840FB88B"><span class="usertext">['ambulances.shp', 'boundary.shp', 'fire_stations.shp', 'fire_zones.shp', 'voting_divisions.shp', 'voting_sites.shp']</span></p><p id="GUID-DA5C211B-786A-414F-970C-996171CB6DAD">接下来,您将创建一个 for 循环以遍历列表中的元素。</p></div></li><li purpose="step" id="ESRI_STEP_2F7C23B48B194C5FBC46A55289AB92C3"><span purpose="cmd">输入以下代码行并按 <span class="shortcut">Enter</span> 键,以开始一个代码块:</span><div class="info" purpose="info"><p id="GUID-E096DA27-BFDA-47F5-8778-AD806B56FD66"><span class="usertext">for fc in fc_list:</span></p></div></li><li purpose="step" id="ESRI_STEP_12443199D6E741118845D2CBBD78F63D"><span purpose="cmd">输入以下代码行并按 <span class="shortcut">Enter</span> 键:</span><div class="info" purpose="info"><p id="GUID-6760E218-688B-4513-BE7B-84B2663A9774"><span class="usertext">count = arcpy.management.GetCount(fc)</span></p><p id="GUID-7FB35E2F-0666-481D-A11C-12F025F8F7A1">此代码行使用与您之前相同的<span class="uicontrol">获取计数</span>工具,但是现在它使用的是变量 <span class="usertext">fc</span>,而非特定要素类的名称。 由于 <span class="usertext">fc</span> 更新为在要素类列表中包含每个要素类名称,并且每次迭代都使用下一个要素类。</p></div></li><li purpose="step" id="ESRI_STEP_356977DD8A064EB1B6E6B4D3DEFE2A9E"><span purpose="cmd">输入以下代码行并按两次 <span class="shortcut">Enter</span> 键:</span><div class="info" purpose="info"><p id="GUID-6629D030-19E5-43F1-AFE1-5C211C6EB620"><span class="usertext">print(count)</span></p><p id="GUID-F2ACC9E7-D5E5-4F11-A4AE-CD180F328407">结果将打印工作空间中每个 shapefile 的要素数量。</p><p id="GUID-2CEE425E-E308-433D-8249-EB0716C93753"><img purpose="img" placement="inline" alt="结果将打印每个 shapefile 的要素数量。" title="结果将打印每个 shapefile 的要素数量。" src="GUID-F9699CEF-CE21-4E92-B3F4-3532CF5EEAAD-web.png" loading="lazy"/></p>
<p id="GUID-332C1070-4FB3-4CD5-889C-201A816B8595">您开发的代码完成了对每个 shapefile 中的要素进行计数的任务。 该代码不是很完善,因为对于许多 shapefile 来说,读取打印输出很麻烦。 您可以添加代码以创建更有意义的输出,例如在每次计数后包括要素类名称、将结果写入文本文件、计算工作空间中要素的总数或确定要素类最多的一个或多个要素类。</p><p id="GUID-A84F0E22-FE8C-45BC-B79A-17AAE940A137"><span class="uicontrol">Python</span> 窗口中所用的相同的代码也可以用于 <a target="_blank" class="xref xref" href="https://www.esri.com/arcgis-blog/products/arcgis-pro/analytics/introducing-arcgis-notebooks-in-arcgis-pro/"><span class="ph">ArcGIS Pro</span> 中的 <span class="ph">ArcGIS Notebooks</span></a>(或在 <span class="ph">ArcGIS Pro</span> 外部的 <a target="_blank" class="xref xref" href="https://www.esri.com/arcgis-blog/products/api-python/administration/python-api-core-concepts-part-2/"><span class="ph">Jupyter Notebook</span></a> 中)。 这些步骤不在此处介绍,但是您可以从 <span class="uicontrol">Python</span> 窗口复制代码并将其粘贴到 <span class="ph">Notebooks</span> 中的单元格中。</p><p id="GUID-EDD6C69A-4E37-437B-B06A-11601469F065">您也可以在 <span class="ph">ArcGIS Pro</span> 外部的 <span class="ph">Python</span> 编辑器中使用代码,下一步将执行此操作。 您可以从 <span class="uicontrol">Python</span> 窗口将代码复制到 <span class="ph">Python</span> 脚本文件以在 <span class="ph">Python</span> 编辑器中开始工作。</p></div></li><li purpose="step" id="ESRI_STEP_1ED5CA7CF2A94E439B27DFAD65785D41"><span purpose="cmd">右键单击 <span class="uicontrol">Python</span> 窗口脚本中的代码,然后单击<span class="uicontrol">保存脚本</span>。</span></li><li purpose="step" id="ESRI_STEP_592F14FF79AC46278A0522E5263A182E"><span purpose="cmd">在<span class="uicontrol">保存脚本</span>窗口中,浏览至 <span class="usertext">C:\PythonStart</span> 文件夹并将您的作业另存为 <span class="usertext">count_features.py</span>。</span></li><li purpose="step" id="ESRI_STEP_7EEFF2FCB3C94D299B3B4774A5CE2DE0"><span purpose="cmd">保存工程并关闭 <span class="ph">ArcGIS Pro</span>。</span><div class="info" purpose="info"><p id="GUID-9178D962-D838-4407-AD34-72871BFDC79A">现在,您可以在 <span class="ph">Python</span> 编辑器中打开脚本。</p></div></li></ol></div></section></section><section class="section1 padded-anchor" id="subsection-7" purpose="section1"><h2>在 Python 编辑器中运行脚本</h2><p id="GUID-1742383F-2E1A-4237-B428-C15FDBA68305">在 <span class="ph">ArcGIS Pro</span> 中使用 <span class="uicontrol">Python</span> 窗口或在 Notebook 中运行 <span class="ph">Python</span> 代码时,有时您需要在 <span class="ph">ArcGIS Pro</span> 外部运行代码。 典型示例是当您计划在预先确定的时间运行脚本时,但同时也存在其他情况。 例如,更复杂的工程通常需要多个可配合运行的代码元素,通常这意味着需要在多个单独 <span class="usertext">.py</span> 文件中组织您的代码。 您可以将脚本用作创建自定义工具的一部分,这也需要 <span class="usertext">.py</span> 文件。</p><p id="GUID-C25F70BC-8C6A-41A8-9D9A-BABE5831B618">在 <span class="ph">ArcGIS Pro</span> 外部运行 <span class="ph">Python</span> 代码需要 <span class="ph">Python</span> 代码编辑器,也称为集成开发环境 (IDE)。 在本部分中,您将使用一个名为 IDLE 的 IDE,它代表 Integrated DeveLopment Environment(请注意大写 L)。 IDLE 将随 <span class="ph">Python</span> 的每次安装一起提供,因此如果您的计算机装有 <span class="ph">Python</span>,则它也具有 IDLE。</p><p id="GUID-36917683-019C-42B0-B8D7-E2C8D838C830">还有许多其他 Python IDE(包括 PyCharm 和 Spyder),但是 IDLE 是一个不错的起点。 类似 PyCharm 和 Spyder 的 IDE 需要通过其他步骤进行下载、安装和配置,而 IDLE 是任何 <span class="ph">Python</span> 安装的一部分并可供使用。</p><section class="wfsteps padded-anchor" purpose="wfsteps"><div class="steps" id="ESRI_STEPS_34141289A67A40199C911E3189DAA7A2"><ol class="list-numbered" purpose="ol"><li purpose="step" id="ESRI_STEP_BF5E6BEC4E284FF5A7B6099C46AC73CE"><span purpose="cmd">启动文件资源管理器。</span></li><li purpose="step" id="ESRI_STEP_DF7EDB08AB2E4824A71D4CF02C40E816"><span purpose="cmd">浏览至 <span class="usertext">C:\PythonStart</span> 文件夹。</span></li><li purpose="step" id="ESRI_STEP_85F0B5B4A99E43258549C53BC758AB66"><span purpose="cmd">右键点击 <span class="uicontrol">count_features.py</span> 文件并单击<span class="uicontrol">使用 IDLE 编辑 (ArcGIS Pro)</span>。</span><div class="info" purpose="info"><p id="GUID-281A759F-6137-488A-991E-1E58A99EBA21"><img purpose="img" placement="inline" alt="在文件资源管理器中使用 IDLE 选项进行编辑" title="在文件资源管理器中使用 IDLE 选项进行编辑" src="GUID-E8CB25CF-D43B-42C5-A3F4-C349D76B8688-web.png" loading="lazy"/></p>
<p id="GUID-333271F1-C6AA-4CBC-B8B2-F87FC083A06F">这将在 IDLE 的脚本窗口中打开 <span class="ph">Python</span> 脚本。 如果您已安装 <span class="uicontrol"/><span class="ph">ArcGIS Desktop</span>选项。 您应该借助<span class="uicontrol">使用 IDLE 编辑 (ArcGIS Pro)</span>,因为这会使用随 <span class="ph">ArcGIS Pro</span> 安装的 <span class="ph">Python</span> 版本打开脚本。<span class="ph">ArcGIS Desktop</span> 10.x 使用旧版 <span class="ph">Python</span>。</p><div class="panel trailer-1 note" id="GUID-406B66CD-21C1-4255-8F74-B7F2C4580C05"><h5 class="icon-ui-comment trailer-0">注:</h5><p id="GUID-B9007F00-5301-4232-BB16-89A805EF9F4D">如果<span class="uicontrol">使用 IDLE 编辑 (ArcGIS Pro)</span> 在快捷菜单中不可见,单击<span class="uicontrol">开始</span>,展开 <span class="uicontrol">ArcGIS</span>,然后打开 <span class="uicontrol">Python 命令提示符</span>。 在 <span class="uicontrol">Python 命令提示符</span>窗口中,输入 idle 并按 <u>Enter</u> 键。 <span class="uicontrol">IDLE</span> (<span class="uicontrol">Python 3.9 Shell</span>) 随即显示。 单击<span class="uicontrol">文件</span>,然后选择<span class="uicontrol">打开</span>。 浏览并打开 <span class="uicontrol">count_features.py</span> 文件。</p></div><p id="GUID-C9E8C89E-3E92-4E9F-B727-3BB3E7D9815E"><img purpose="img" placement="inline" alt="具有导出代码的 IDLE 中的脚本窗口" title="具有导出代码的 IDLE 中的脚本窗口" src="GUID-B2BAE6EB-291A-4DA8-B1B3-D716C4A95900-web.png" loading="lazy"/></p>
<p id="GUID-BB8FDF79-5466-4E0A-A977-2FDC4FE92A35">脚本窗口的顶部显示用于 <span class="ph">Python</span> 的 IDLE 版本。 这是与 <span class="ph">ArcGIS Pro</span> 应用程序安装的 <span class="ph">Python</span> 版本。 使用 <span class="ph">Python</span> 3.7 编写的脚本可能无法在旧版本 (2.x) 的 <span class="ph">Python</span> 中使用。</p><p id="GUID-6D64C201-1E39-451C-9AA4-8732F05AB003">该代码包含 <span class="uicontrol">Python</span> 窗口脚本的全部内容,包括所有结果。 结果前面带有 # 符号或井号,表示其为注释。 <span class="ph">Python</span> 会跳过注释中的所有内容,但是它们可能是记录代码不同部分功能的一种非常有用的方法。</p><p id="GUID-6AD09EFE-3B4A-4FE4-BFB7-52EDD3309656">在使用此代码之前,您将快速了解 IDLE 中 <span class="ph">Python</span> Shell 的工作原理。</p></div></li><li purpose="step" id="ESRI_STEP_D319E4C1CA5D48F18771786EAFCA8B35"><span purpose="cmd">在 IDLE 的顶部菜单中,单击<span class="uicontrol">运行</span>,然后单击 <span class="uicontrol">Python Shell</span>。</span><div class="info" purpose="info"><p id="GUID-92BD5E18-84F5-42E7-845C-9C0099EF46E0">这将打开 <span class="ph">Python</span> Shell 或交互式解释程序。 符号 >>> 被称为提示符。 在使用交互式解释程序时,可以使脚本窗口的 <span class="uicontrol">count_features.py</span> 文件保持打开状态,因为随后将继续使用它。</p></div></li><li purpose="step" id="ESRI_STEP_F70D47FEBD7C45D5AF7066DD1C770033"><span purpose="cmd">将光标放在提示符处(<span class="usertext">>>></span> 之后),然后输入以下代码:</span><div class="info" purpose="info"><p id="GUID-2DB2389A-1EAB-4251-973C-A33DC45621DD"><span class="usertext"> print("GIS is cool")</span></p><p id="GUID-C029F0C5-E750-4F32-BB76-F6D9D4235329"><img purpose="img" placement="inline" alt="Python Shell 窗口中的打印代码" title="Python Shell 窗口中的打印代码" src="GUID-BFF9B6BE-8ED2-402E-8FA7-C696502389BF-web.png" loading="lazy"/></p></div></li><li purpose="step" id="ESRI_STEP_5887414BDDCB44609FB2E06C37D4F916"><span purpose="cmd">按 <span class="shortcut">Enter</span> 键。</span><div class="info" purpose="info"><p id="GUID-4898F21D-039A-483B-A42E-DE3E293CC368">结果将打印到下一行,并将显示新提示符。</p><p id="GUID-3E3DE871-53A9-4CC8-B2BC-6965F2187AB5"><img purpose="img" placement="inline" alt="在 Python Shell 中打印结果" title="在 Python Shell 中打印结果" src="GUID-AB5F44D6-2014-478E-9031-7A865A69AB16-web.png" loading="lazy"/></p>
<p id="GUID-1523B7D6-AD00-41D5-816D-C3CDFB02BB3B">在交互式解释程序中运行代码与在 <span class="uicontrol">Python</span> 窗口中逐行运行代码类似。 每次按 <span class="shortcut">Enter</span> 键,代码行均将运行,并且结果(如果有)将打印到下一行。 主要区别是 <span class="ph">Python</span> Shell 不具有用于脚本和提示符的单独部分,但是在其他方面,两种方法几乎相同。</p><p id="GUID-C1B1C547-72F0-4329-894E-F9A5EAE43ADD">接下来,您将清除脚本并运行代码。</p></div></li><li purpose="step" id="ESRI_STEP_AD56F0202488408F80B873AE7D74EE1A"><span purpose="cmd">关闭 <span class="uicontrol">IDLE 3.9.18 Shell</span> 窗口,然后返回到 <span class="uicontrol">count_features.py</span> 脚本的脚本窗口。</span></li><li purpose="step" id="ESRI_STEP_00139DC85DBA478786ACE6E130B00CD3"><span purpose="cmd">清理代码,方法是移除 <span class="usertext">arcpy.env.workspace</span> 开头的所有行,并删除所有 # 符号标识的结果行,此符号表示其为注释代码。</span></li><li purpose="step" id="ESRI_STEP_563BFBB8E48A439B9A63BC2DC3825414"><span purpose="cmd">删除这两个连续行:</span><div class="info" purpose="info"><p id="GUID-4759AE6B-6771-4F76-B3F4-7FCBACDE936E"><span class="usertext">count = arcpy.management.GetCount("ambulances.shp")</span></p><p id="GUID-808620C0-F65A-4F9B-8418-45A7D6762FD5"><span class="usertext">print(count)</span></p></div></li><li purpose="step" id="ESRI_STEP_AEDD1B16918C46BD9D3C7F11781E365F"><span purpose="cmd">删除此行:</span><div class="info" purpose="info"><p id="GUID-1445384D-37E3-4C0D-AA5F-9B2BE692D342"><span class="usertext">print(fc_list)</span></p><p id="GUID-294701CD-9136-430F-8869-EF0BCB278B4A">其余代码为:</p><p id="GUID-C10B61AD-A450-4A2B-90B1-7CACCC2CD2C0"><section class="codeblock padded-anchor" purpose="codeblock"><div class="codeblockbody"><pre><code class="other no-highlight">
arcpy.env.workspace = "C:/PythonStart"
fc_list = arcpy.ListFeatureClasses()
for fc in fc_list:
count = arcpy.management.GetCount(fc)
print(count)</code></pre></div></section></p><p id="GUID-54FCA45F-89EB-422D-9C21-37078AB0B170"><img purpose="img" placement="inline" alt="IDLE 中的计数要素脚本" title="IDLE 中的计数要素脚本" src="GUID-ACEFD8B0-1C8B-4F04-AC91-513A887384BA-web.png" loading="lazy"/></p>
</div></li><li purpose="step" id="ESRI_STEP_6580E82DA90B4693A8341C058123E899"><span purpose="cmd">确保最后一行缩进四个空格以匹配上面的行。</span></li><li purpose="step" id="ESRI_STEP_2EAF7394840449B9A78B5C09C3D1D026"><span purpose="cmd">单击<span class="uicontrol">文件</span>,然后单击<span class="uicontrol">保存</span>以保存脚本。</span></li><li purpose="step" id="ESRI_STEP_7A2EF58CB1A64153A13CBDDFC9811A21"><span purpose="cmd">单击<span class="uicontrol">运行</span>,然后单击<span class="uicontrol">运行模块</span>以运行脚本。</span><div class="info" purpose="info"><p id="GUID-151D3BA4-BF6C-4961-B42E-5A7877D9BDE2">结果将打印到交互式窗口。</p><p id="GUID-94028071-0C2D-442C-8A7D-1CC1D88005A4"><img purpose="img" placement="inline" alt="具有错误消息的 Python Shell" title="具有错误消息的 Python Shell" src="GUID-57FD3710-DDF3-43E9-AA90-5825E1A804B2-web.png" loading="lazy"/></p>
<p id="GUID-8EDD4388-BBEF-4150-8CFD-7D0766E637F2">交互式窗口未打印要素计数,而是打印了以下错误:</p><p id="GUID-58AD59D6-89E3-457D-8982-8E713B37644E"><span class="usertext">NameError: name 'arcpy' is not defined</span></p><p id="GUID-D8EF3307-DB4B-4FF7-A9A9-A6261DE00124">发生错误的原因是您使用的是 ArcPy 包,但是正在 <span class="ph">ArcGIS Pro</span> 外部运行代码。 要使用包,需要将其导入脚本的顶部。</p></div></li><li purpose="step" id="ESRI_STEP_F6F093CE49F747F5AEC655ECF783BE99"><span purpose="cmd">关闭 <span class="uicontrol">IDLE 3.9.18 Shell</span> 窗口。</span></li><li purpose="step" id="ESRI_STEP_B6A795A1D2904518B1CC727F6CDB9FF9"><span purpose="cmd">将光标置于脚本第一行的第一个字符位置。 按 <span class="shortcut">Enter</span> 键。</span><div class="info" purpose="info"><p id="GUID-15139FF5-41F0-48A4-BE7E-B4F698305632">随即在脚本的开头添加空白行。</p></div></li><li purpose="step" id="ESRI_STEP_59CAD7E2A0EE47CEA390A0A0CDDCADC2"><span purpose="cmd">在脚本的第一行添加以下代码:</span><div class="info" purpose="info"><p id="GUID-3459F168-C876-4DBB-A23E-76362516D296"><span class="usertext">import arcpy</span></p>
</div></li><li purpose="step" id="ESRI_STEP_B0402041CC8B4465B795CAA801C7D0C2"><span purpose="cmd">保存并运行脚本。</span><div class="info" purpose="info"><p id="GUID-6FE0A341-DE50-4F4F-A040-D7A42A2DB9C1">结果计数将打印到交互式窗口。</p><p id="GUID-D54048B9-5196-4BBE-9896-1A093D23B2A7"><img purpose="img" placement="inline" alt="已打印要素数量的" title="已打印要素数量的" src="GUID-472A5DD0-D58F-4FB3-A5DA-9EAC3F442E9F-web.png" loading="lazy"/></p><p id="GUID-C519E59E-499D-42CD-A8A3-085889180E66">首次在脚本中使用 ArcPy 时,可能要花一些时间才能显示结果,因为 <span class="ph">Python</span> 需要花费几秒钟的时间导入 ArcPy。</p><p id="GUID-29F6ED22-1B68-4C1B-89F6-F286B41C1BEE">结果与在 <span class="ph">ArcGIS Pro</span> 中运行代码的结果相同,但是 <span class="ph">ArcGIS Pro</span> 无需打开即可运行脚本(尽管确实需要在所用计算机上安装并获得许可)。</p><p id="GUID-91DB20C8-160B-455D-A04C-29CA3DBCC4D1">使用 <span class="ph">Python</span> 编辑器处理代码存在诸多益处。 主要优势是您可以编写更长的脚本并将代码另存为 <span class="usertext">.py</span> 文件。 将代码另存为文件还可以使代码更易于调试和重用。</p></div></li></ol></div></section></section><section class="section1 padded-anchor" id="subsection-8" purpose="section1"><h2>运行 Python 代码的方法比较</h2><p id="GUID-DB0BE67E-D58A-490F-BB1C-42EAA03F74B6">您已经了解两种编写和运行 <span class="ph">Python</span> 代码的方法。 每种方法的优缺点汇总如下。 在本教程中,并未深入介绍所有元素,但是当您继续学习 Python 时,记住这些要点将非常有用。</p><p id="GUID-29E0C542-CAE6-4EDA-85E2-BA453A0DB622"/><h4 class="table title"/><div class="overflow-auto"><table class="tablexyz lined-rows lined-columns bordered
always-wrap
"><colgroup width="1.00*"/><colgroup width="1.84*"/><colgroup width="2.30*"/><thead><tr><th colspan="1">方法</th><th colspan="1">优点</th><th colspan="1">缺点</th></tr></thead><tbody class="align-middle"><tr class="align-middle"><td outputclass="" purpose="entry" rowspan="1" colspan="1"><p id="GUID-C5FD451D-C078-400C-92E1-F9B60B291812"><span class="ph">ArcGIS Pro</span> 中的 Python 窗口</p></td><td outputclass="" purpose="entry" rowspan="1" colspan="1"><ul purpose="ul" id="UL_7B05168BC11948B28BCE870C44C334BE"><li purpose="li" id="LI_89C46FCB3CFB476D94911D87F40A4C5A">容易入门</li><li purpose="li" id="LI_EA7E6C1549AE4DE6B62C66F620700E28">与 <span class="ph">ArcGIS Pro</span> 内部的数据和地图进行交互</li><li purpose="li" id="LI_356A14E41EC64231B47B46A6778DCC75">提供直观的代码完成帮助</li></ul></td><td outputclass="" purpose="entry" rowspan="1" colspan="1"><ul purpose="ul" id="UL_60917CAF663C4561989297798E062556"><li purpose="li" id="LI_F0417E076F0B4B0DB0BAFB1035B8E747">仅限于较短的代码段</li><li purpose="li" id="LI_B768D5E6D0D342239048A5D6DB915563">缺少 <span class="ph">Python</span> 编辑器中的许多常见功能</li><li purpose="li" id="LI_70A94F128CA54AEFB199998BB2F6AC59">并非旨在保存和组织脚本</li><li purpose="li" id="LI_DC9B28E10D364BF695BCAB3083BB3E2E">只能在 <span class="ph">ArcGIS Pro</span> 中使用</li></ul></td></tr><tr class="align-middle"><td outputclass="" purpose="entry" rowspan="1" colspan="1"><p id="GUID-40F55A96-8B31-454B-B534-82B3645AD194"><span class="ph">Python</span> 编辑器 (IDE)</p></td><td outputclass="" purpose="entry" rowspan="1" colspan="1"><ul purpose="ul" id="UL_C30CD43C5DEB473EB87C2550E32FF42C"><li purpose="li" id="LI_EA8ABD14063C4545B0E5A055AAD3943F">无需打开 <span class="ph">ArcGIS Pro</span>,即可运行代码</li><li purpose="li" id="LI_FCF1AE113F16463A8BDE69BD7740AC5D">包括许多功能,可帮助编写和测试更复杂的代码</li><li purpose="li" id="LI_59F9456AAC9C4B4F81317FA4691B35B0">作业另存为 <span class="usertext">.py</span> 文件来组织更复杂的代码工程</li><li purpose="li" id="LI_3D23745EC2244385BA742731DAFEA66E">不同 IDE 可以满足不同的用户类型和技能水平</li><li purpose="li" id="LI_99D9C1FA1B044928BEF1E82FA340ADCA">某些 IDE 可以用于多种编程语言</li></ul></td><td outputclass="" purpose="entry" rowspan="1" colspan="1"><ul purpose="ul" id="UL_1B5BE60B7D2D4BD58670D85B64D15042"><li purpose="li" id="LI_E3B134B2AFA343718A47351589C0EB38">功能因所使用的特定 IDE 而有所不同</li><li purpose="li" id="LI_DFF7D5704C0F46F0A34ACAC031922CBC">根据 IDE,可能缺少代码完成提示</li><li purpose="li" id="LI_35B1E34723354CF4A8FB7CEA0DBD9563">一些 IDE 需要先进行自定义配置,然后才能与 <span class="ph">ArcGIS Pro</span> 配合使用</li><li purpose="li" id="LI_E9B1958C11CC4F1D83C56FD642046C33">对于初学者而言,某些 IDE 可能会很复杂</li></ul></td></tr></tbody><caption/></table></div><p id="GUID-4FD6FD53-3472-4643-88F3-5A90D25346EB"/><div class="panel trailer-1 note" id="GUID-4CBE9AE5-F08B-4D96-9E60-86075B063AA1"><h5 class="icon-ui-comment trailer-0">注:</h5><p id="GUID-87B67D4D-31C8-4BAB-9DFD-025C86D92E81">对于在 <span class="ph">ArcGIS Pro</span> 中运行的代码(包括 <span class="uicontrol">Python</span> 窗口),不需要使用导入 arcpy。 对于在 <span class="ph">ArcGIS Pro</span> 外部运行的代码(例如在 <span class="ph">Python</span> 编辑器中),必须先使用导入 arcpy,然后才能使用 ArcPy 包的功能。</p></div><p id="GUID-4F9D970F-A63E-4570-8A03-1EB83A6C0FF6">还有其他几种运行 <span class="ph">Python</span> 代码的方法。 这包括在 Notebook 中运行代码、使用命令行运行脚本或计划从操作系统运行脚本。 其他教程中介绍了这些内容。</p></section><section class="wfsummary padded-anchor" id="GUID-1D55F0A3-1AFB-41AF-86C0-219043FC75CD" purpose="wfsummary"><p id="GUID-92B75415-A724-4403-8C8E-72179F7C84BB">您已经了解了如何在 <span class="uicontrol">Python</span> 窗口和 IDLE 中编写和运行 <span class="ph">Python</span> 代码。 您了解了变量和循环,这是 <span class="ph">Python</span> 中两个非常重要的概念。 您还学习了如何在 <span class="ph">Python</span> 中设置环境,以及如何在 <span class="ph">Python</span> 中使用标准 ArcGIS 地理处理工具。 这是有关如何在 <span class="ph">ArcGIS Pro</span> 中使用 <span class="ph">Python</span> 的系列教程的第一部分 - 敬请期待!</p><p id="GUID-C54E9849-001D-4B4E-B7B0-C46066FEBDB8">您也可能对由 <a target="_blank" class="xref xref" href="https://esripress.esri.com/display/index.cfm">Esri Press</a> 出版的 Paul A.Zandbergen 博士的 <a target="_blank" class="xref xref" href="https://esripress.esri.com/display/index.cfm?fuseaction=display&websiteID=384&moduleID=0">适用于<span class="ph">ArcGIS Pro</span> 的 <span class="ph">Python</span> 脚本</a>和<a target="_blank" class="xref xref" href="https://esripress.esri.com/display/index.cfm?fuseaction=display&websiteID=393&moduleID=0">适用于 <span class="ph">ArcGIS Pro</span> 的高级 <span class="ph">Python</span> 脚本</a>感兴趣。</p><p id="GUID-344F776C-1204-4D50-AF10-60B6A5B9DA56">您可以在<a class="xref xref" esrisubtype="extrel" hrefpfx="" href="/en/gallery/">教程库</a>中找到更多教程。</p></section>