亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用嵌套循環創建嵌套列表

使用嵌套循環創建嵌套列表

守候你守候我 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]. 我已經完成了這么多?,F在我要做的是遍歷原始文件名列表并將它們與我的新列表進行比較以創建一個嵌套列表,該列表根據文件的順序號分隔文件。使用相同的示例目錄,列表將如下所示:[[1234567890-UP.csv,1234567890-DOWN.csv],[2000005001-UP.csv,2000005001-DOWN.csv]]最后,我想遍歷此列表并.csv根據列表索引將文件合并在一起??赡苡幸环N我忽略的更簡單的方法可以為我省去很多麻煩。我當前使用嵌套 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 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號