python2.7的arcpy注意事项(arcpy运行图例项)

文章讲述了在使用arcpy进行地图制图时遇到的路径处理问题,特别是涉及到中文路径和urllib编码时出现的错误。通过试验,作者发现arcpy.mapping.MapDocument不支持中文路径,并且在处理路径时应注意使用r前缀或正确编码。最后,作者提供了成功的代码示例,强调了路径字符串的正确表示方式以及在处理图例项时应使用英文而非中文的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近期做arcpy的制图图例,从新建图例属性中建立图例项,并通过arcpy在制图脚本中引用,途中出现一些问题,希望与大家一起探讨:

在码时发现arcpy里有些函数无法使用路径的ur:(pycharm中运行)

# -*- coding:utf-8 -*-
import arcpy
import os
mxd = arcpy.mapping.MapDocument(ur"C:\ArcGIS\T初始.mxd")
df = arcpy.mapping.ListDataFrames(mxd)[0]
lyrFile = arcpy.mapping.Layer(ur"C:\ArcGIS\新建图层组.lyr")
arcpy.mapping.AddLayer(df, lyrFile, "TOP")
styleItem = arcpy.mapping.ListStyleItems("USER_STYLE", "Legend Items", u"图例项宋体25")[0]  # "Legend Items"注意这里用英文,而不是样式管理器中显示的中文
lyr = arcpy.mapping.ListLayers(mxd, u'KZST汇总_Merge')[0]

legend = arcpy.mapping.ListLayoutElements(mxd, "LEGEND_ELEMENT")[0]
legend.updateItem(lyr, styleItem)
mxd.save()
del mxd

运行错误:

  File "C:/ArcGIS/pythonProject/test.py", line 4
    mxd = arcpy.mapping.MapDocument(ur"C:\ArcGIS\T初始.mxd")
SyntaxError: (unicode error) 'rawunicodeescape' codec can't decode bytes in position 2-3: truncated \uXXXX

仅保留r:

mxd = arcpy.mapping.MapDocument(r"C:\ArcGIS\T初始.mxd")

出现另一个问题:

Traceback (most recent call last):
  File "C:/ArcGIS/pythonProject/test.py", line 4, in <module>
    mxd = arcpy.mapping.MapDocument(r"C:\ArcGIS\T初始.mxd")
  File "C:\ArcGIS\Desktop10.8\ArcPy\arcpy\arcobjects\mixins.py", line 651, in __init__
    assert (os.path.isfile(mxd) or (mxd.lower() == "current")), gp.getIDMessage(89004, "Invalid MXD filename")
AssertionError: <exception str() failed>

多次修改尝试后,盲猜arcpy.mapping.MapDocument无法在这种状态识别路径的中文:

修改后:

mxd = arcpy.mapping.MapDocument(r"C:\ArcGIS\T1.mxd")

另一行出现问题:

  File "C:/ArcGIS/pythonProject/test.py", line 6
    lyrFile = arcpy.mapping.Layer(ur"C:\ArcGIS\新建图层组.lyr")
SyntaxError: (unicode error) 'rawunicodeescape' codec can't decode bytes in position 2-3: truncated \uXXXX

最终修改后:

# -*- coding:utf-8 -*-
import arcpy
import os
mxd = arcpy.mapping.MapDocument(r"C:\ArcGIS\T1.mxd")
df = arcpy.mapping.ListDataFrames(mxd)[0]
lyrFile = arcpy.mapping.Layer(r"C:\ArcGIS\新建图层组.lyr")
arcpy.mapping.AddLayer(df, lyrFile, "TOP")
styleItem = arcpy.mapping.ListStyleItems("USER_STYLE", "Legend Items", u"图例项宋体25")[0]
lyr = arcpy.mapping.ListLayers(mxd, u'KZST汇总_Merge')[0]

legend = arcpy.mapping.ListLayoutElements(mxd, "LEGEND_ELEMENT")[0]
legend.updateItem(lyr, styleItem)
mxd.save()
del mxd

才能成功!

总结,arcpy.mapping.MapDocument路径不要出现中文,路径前缀不要同时使用ur:

mxd = arcpy.mapping.MapDocument(u"C:/ArcGIS/副本.mxd")

将反斜杠改为斜杠可以不用写r,也是可以的,即u和r只能保留一个

最后再来一个对比:(也是可以运行的)

mxd = arcpy.mapping.MapDocument(u"C:/ArcGIS/副本.mxd")
df = arcpy.mapping.ListDataFrames(mxd)[0]
lyrFile = arcpy.mapping.Layer("C:/ArcGIS/新建图层组.lyr")

同时注意

styleItem = arcpy.mapping.ListStyleItems("USER_STYLE", "Legend Items", u"图例项宋体25")[0]  # "Legend Items"注意这里用英文,而不是样式管理器中显示的中文


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值