Я относительно новичок в Python и не могу понять, чего мне не хватает в моем коде. Что я пытаюсь сделать, так это создать словарь, содержащий список значений, а затем использовать этот словарь для поиска в каталоге имен файлов, а затем скопировать эти файлы в новую папку (названную в честь ключа, который уже создан). Ключ — это имя контракта, а значения — листы плана контракта, поэтому каждый контракт содержит от 2 до 100 листов. Я заставил код работать, когда каждый ключ имел только одно значение, но теперь, когда это список, он не работает. Любая помощь будет принята с благодарностью!
Я использую arcpy.da.searchcursor
для добавления значений в словарь.
Затем я использую itervalues
для перебора значений словаря и получаю сообщение об ошибкеValueError: too many values to unpack.
recDCT = {}
with arcpy.da.SearchCursor (deviceFC, [contract, RECDOC]) as curs:
for row in curs:
if row[1] <> None and row[0] <> None:
if row[0] in recDCT.keys():
recDCT[row[0]].append(row[1])
else:
recDCT[row[0]] = [row[1]]
for root, dirs, files in os.walk(path):
for key, value in recDCT.itervalues():
if value in files:
shutil.copy(os.path.abspath(root + '/' + value), os.path.abspath(outLoc + '/' + key))
Я ожидаю, что скрипт скопирует все файлы для этого ключа в указанный файл папки в новую папку.
** Обновление, нашел решение, которое мне нужно было использовать цикл for
для вызова каждой клавиши перед повторением списка.
recDCT = {}
with arcpy.da.SearchCursor (deviceFC, [contract, CurrDP]) as curs:
for row in curs:
if row[1] is not None and row[0] is not None:
if row[0] in recDCT.keys():
recDCT[row[0]].append(row[1])
else:
recDCT[row[0]] = [row[1]]
for root, dirs, files in os.walk(path):
for key in recDCT:
for value in recDCT[key]:
if value in files:
shutil.copy(os.path.abspath(root + '/' + value), os.path.abspath(outLoc + '/'+ key))
a += 1
else:
pass
<>
не является оператором в python - person ritlew   schedule 09.04.2019is not
вместо<>
- person DirtyBit   schedule 09.04.2019