Topo转栅格编码错误

时间:2017-10-27 11:03:42

标签: python encoding arcpy

我是python的新手,我已经发现了大量有关编码和UnicodeEncodeError的问题和答案,但我无法弄清楚我的具体问题并不断收到此错误:“ UnicodeEncodeError: 'ascii'编解码器无法编码位置7中的字符u'\ xf8':序数不在范围内(128)“。我正在使用IDLE Python 2.7.12

我想将arcGis工具TopoToRaster用于一组ca. 200个湖泊。我有一个包含200个文件夹的文件夹(每个湖泊一个),在每个湖文件夹中有三个形状文件,名称为lakename_P.shp用于点,lakename_B.shp用于多边形/边界,lakename_L.shp用于折线。湖泊是丹麦湖泊,因此几乎所有湖泊都包含文件夹名称和shp名称中的ø,æ和/或å。

我正在使用for循环遍历单个文件夹,并为每个湖运行该工具,并将正确的要素类作为输入。

我找到了这个代码,它实际上与我的代码一起使用,但是我不能用它打印任何东西,我也知道这些不利因素,所以我想避免它。

import sys
reload(sys)
sys.setdefaultencoding('utf8')

其他解决方案在读取和写入文件时使用.encoding,我实际上并没有这样做。

任何人都可以推荐除reload(sys)之外的解决方案。也许我只需将.encoding放在某处,但我真的不知道在哪里以及如何。我感谢你的每一个帮助,但我想提一下,我已经阅读了所有的Python Unicode HOWTO和其他博客文章。

-*- coding: iso-8859-15 -*-
import arcpy
from arcpy import env
from arcpy.sa import *
path = "//projects/soer"
arcpy.env.workspace = path
arcpy.env.overwriteOutput = True

# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")

wss = arcpy.ListWorkspaces("*", "Folder")
wss.sort()

for ws in wss:
   arcpy.env.workspace = ws
   for polygon in arcpy.ListFeatureClasses(feature_type = "Polygon"):
       myBoundary = polygon
   for point in arcpy.ListFeatureClasses(feature_type = "Point"):
       myPoint = point
   for polyline in arcpy.ListFeatureClasses(feature_type = "Polyline"):
       myContour = polyline

   output = ws + '/' + 'ttr'
   outTTR = TopoToRaster([TopoPointElevation([[myPoint, 'z']]), 
                          TopoContour([[myContour, 'z']]),
                          TopoBoundary([myBoundary])], 2, 
                          "#", "#", "#", "#", "NO_ENFORCE")
   outTTR.save(output)

1 个答案:

答案 0 :(得分:1)

我终于设法自己解决了它,就像那样容易:

for polygon in arcpy.ListFeatureClasses(feature_type = "Polygon"):
    myBoundary = polygon.encode('utf-8')
for point in arcpy.ListFeatureClasses(feature_type = "Point"):
    myPoint = point.encode('utf-8')
for polyline in arcpy.ListFeatureClasses(feature_type = "Polyline"):
    myContour = polyline.encode('utf-8')