1. Tips
在python2.x版本中,python默认的编码方式是ASCII编码,当程序中出现非ASCII编码时,程序会报错
需要在脚本头部中添加:
reload(sys)
Python的sys库是一种内建模块,可对Python的运行环境进行访问和操作。
2. 实例
# -*- coding:utf-8 -*-
import arcpy, os
import sys
import glob
# 重载编码
reload(sys)
sys.setdefaultencoding('utf-8')
# 设置工作路径
path = r'E:\cutpart_test\BuchongPoint\BuchongPoint'
arcpy.env.workspace = path
# CSV输出路径
outPath = r'E:\cutpart_test\BuchongPoint\BuchongCSV'
# glob库获取工作路径下的shp文件列表
list = glob.glob(*.shp')
name_num = len(path)
suffix = '.csv' # 为输出的文件加后缀
print(list)
# 遍历shp文件夹
for lis in list:
print(lis[name_num+1:-4])#输出文件名
try:
# 读取属性表中的字段,先解码再编码
table = arcpy.ListFields(unicode(lis, 'GBK').encode('UTF-8'))
print(table)
if len(table) != 0: # 如果字段长度不为空 则继续
# 输出:路径+文件名+csv后缀
outcsv = outPath +os.sep+ lis[name_num+1:-4] + suffix
f = open(outcsv, 'w') # 打开csv没有则创建,w 可写
# 同样先解码再编码 让属性表里的中文顺利被记录,利用游标读取属性表里的每一条数据
with arcpy.da.SearchCursor(unicode(lis, 'GBK').encode('UTF-8'),
'*') as cursor:
for row in cursor:
f.write(str(row).replace("(", "").replace(")", "") + '\n')
# 读取出来的每个字段属性用双括号分割,故把括号变成空格 ,每记录一行加回车
f.close()
except Exception as e:
print (e)
print("Well done!")