使用嵌套循环创建嵌套列表

我要完成的工作范围更大。我有一个Windows directory可以包含数量可变的.csv文件。这些文件是作为PLC的测试结果生成的。它们通过文件名来区分。测试的每个周期都会生成2个.csv文件。第一个文件名包含订单号,-定界符和字符串UP第二个文件是相同的,只是字符串替换为DOWN

示例文件名:
1234567890-UP1234567890-DOWN

目录示例:
1234567890-UP.csv
1234567890-DOWN.csv
2000005001-UP.csv
2000005001-DOWN.csv

我正在尝试编写一个脚本,该脚本循环遍历目录中的所有文件名并将它们存储在列表中。然后从元素中删除除订单号以外的所有内容。然后删除重复的元素。使用上面的示例目录,我将有一个看起来像的列表[1234567890,2000005001]我已经完成了很多。

现在,我要尝试的是遍历原始文件名列表,并将它们与我的新列表进行比较,以创建一个嵌套列表,该嵌套列表根据文件的顺序号将文件分开。使用相同的示例目录,列表如下所示:[[1234567890-UP.csv,1234567890-DOWN.csv],[2000005001-UP.csv,2000005001-DOWN.csv]]

最后,我想遍历此列表,.csv并根据列表索引文件合并在一起。

我可能忽略了一种更简单的方法来执行此操作,这将为我省去很多麻烦。

我当前使用嵌套的for循环填充嵌套列表的代码如下所示

    nestedlist=[]
    for x in range(len(filenamelist)):
        for y in range(len(filteredlist)):
            if filteredlist[y] in filenamelist[x]:
                nestedlist[y].append(filenamelist[x]

这将返回一个错误Index out of range这是因为nestedlist从未定义过的大小我不太确定该怎么做,或者最好的方法是什么?

狮子座

这可以以更简单的方式实现。假设目录的文件列表为-

files = [1234567890-UP.csv,1234567890-DOWN.csv,2000005001-UP.csv,2000005001-DOWN.csv]

您可以对此进行迭代,创建订单号到实际文件名的映射。

filemap = {}
for file in files:
  order_number = re.compile('(\d*)-(\w*).csv').match(file).groups()[0]
  print(order_number)
  files = filemap.get(order_number, [])
  files.append(file)
  filemap[order_number] = files

那应该给这样的东西。

{'1234567890': ['1234567890-UP.csv', '1234567890-DOWN.csv'],
 '2000005001': ['2000005001-UP.csv', '2000005001-DOWN.csv']}

现在您可以查找订单号并在需要时合并

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章