遍历字典列表以遍历目录以查找文件并将其复制到新位置

时间:2019-04-09 13:27:36

标签: python arcpy

我是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

1 个答案:

答案 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]: