我是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
答案 0 :(得分:0)
首先,<>
之前不是python运算符。在python中,许多对象都可以使用真值测试。这意味着空对象或未初始化的对象在布尔上下文中返回false,否则返回true。
例如:
bool([]) -> False
bool([1]) -> True
bool(None) -> False
例如,您可以简单地将if row[1] <> None and row[0] <> None:
替换为以下代码。这更具可读性和Python风格:
if row[1] and row[0]: