【发布时间】:2019-04-09 13:27:35
【问题描述】:
我对 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 中的运算符 -
使用
is not而不是<>