python - 使用嵌套循环创建嵌套列表
问题描述
我想要完成的更大范围是这个。我有一个Windows directory
可以包含可变数量的.csv
文件。这些文件是作为 PLC 的测试结果生成的。它们通过文件名来区分。每个循环测试生成 2 个.csv
文件。第一个文件名包含订单号、-
分隔符和字符串UP
。第二个文件是相同的,只是字符串被替换为DOWN
.
示例文件名:
1234567890-UP
或1234567890-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']}
现在您可以查找订单号并在需要时合并
推荐阅读
- c - 终端中的 C 登录程序,输入输出有一些问题
- python - 如何将随机生成的数字添加到 pandas DataFrame 中的元素
- jquery - jQuery填充输入未使用通过url传递的信息填充表单
- django - 我可以在同一个模板中添加 2 个或更多不同的表单吗?
- mysql - MySQL从前几行添加余额
- c# - x字符后如何更改颜色
- json - KafkaJsonSerializer:案例类的默认构造函数
- postgresql - 即使输入是 Latin1,PostgreSQL 也可以将条目转换为 UTF-8 吗?
- sqlmap - SQLMAP 缺少一个或多个核心扩展('gzip'、'ssl'、'sqlite3'、'zlib')
- c# - 如何在制作 zip 文件之前将文件内容制作为 base64 编码