为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守候你守候我 2023-02-15 15:21:51
我想要完成的更大范围是这个。我有一个Windows directory可以包含可变数量的.csv文件。这些文件是作为 PLC 的测试结果生成的。它们通过文件名来区分。每个周期测试生成 2 个.csv文件。第一个文件名包含订单号、-定界符和字符串UP. 第二个文件是相同的,只是字符串被替换为DOWN.示例文件名:1234567890-UP或1234567890-DOWN目录示例:1234567890-UP.csv1234567890-DOWN.csv2000005001-UP.csv2000005001-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这是因为从未定义过的大小。我不太确定该怎么做或最好的方法是什么?
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

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


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']}

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


查看完整回答
反对 回复 2023-02-15
?
慕容森

TA贡献1853条经验 获得超18个赞

您应该直接追加到nestedlist,而不是nestedlist[y]。y空列表中没有索引。


你也可以这样简化;这range是不必要的,因为您可以直接遍历列表:


nestedlist=[]

   for x in filenamelist:

      for y in filteredlist:

         if y in x:

            nestedlist.append(x)


查看完整回答
反对 回复 2023-02-15
  • 2 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号