【问题标题】:Iterating through dictionary list to search through directory to find files and copy them to new location遍历字典列表以搜索目录以查找文件并将它们复制到新位置
【发布时间】: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

【问题讨论】:

  • &lt;&gt; 不是 python 中的运算符
  • 使用is not 而不是&lt;&gt;

标签: python arcpy


【解决方案1】:

首先,正如之前所说,&lt;&gt; 不是 python 运算符。在 python 中,可以使用许多对象的真值测试。这意味着空对象或未初始化的对象在布尔上下文中返回 false,否则返回 true。

例如:

bool([]) -> False
bool([1]) -> True
bool(None) -> False

例如,您可以简单地将if row[1] &lt;&gt; None and row[0] &lt;&gt; None: 替换为以下代码。这更具可读性和 Pythonic:

if row[1] and row[0]:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2021-02-26
    • 1970-01-01
    相关资源
    最近更新 更多