#arrays #python-3.x #numpy #dictionary #arcpy
#массивы #python-3.x #numpy #словарь #arcpy
Вопрос:
У меня возникли проблемы с запуском этого кода, и я получаю следующую ошибку:
strucArray = np.array(arrayTuple, np.dtype([('inSeqNum', np.int), (lstVals[0], np.float)]))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'map'
Это блок кода:
seqnum = None
lstFile = open(inListFileName)
for lstLn in lstFile.readlines():
lstVals = lstLn.strip().split()
basePath=os.getcwd()
file=os.path.join(basePath, 'OUT_ST',lstVals[1])
if len(lstVals) > 1:
loadArray = np.loadtxt(file).flatten()
if seqnum is None:
seqnum = np.arange(1, len(loadArray) 1)
arrayTuple = map(tuple, np.column_stack((seqnum, loadArray)))
strucArray = np.array(arrayTuple, np.dtype([('inSeqNum', np.int), (lstVals[0], np.float)]))
arcpy.da.ExtendTable(target, seqFieldName, strucArray, 'inSeqNum', False)
lstFile.close()
Комментарии:
1. В Python3
map
не вычисляет его значения; он просто устанавливает сопоставление.list(map...)
требуется для фактического выполнения сопоставления.
Ответ №1:
Я думаю, вам просто нужно добавить приведение списка к этой строке:
strucArray = np.array(arrayTuple, np.dtype([('inSeqNum', np.int), (lstVals[0], np.float)])
К этому:
strucArray = np.array(list(arrayTuple), np.dtype([('inSeqNum', np.int)`, (lstVals[0], np.float)]))