我有以下数据:
Switch1
int1
int2
int3
int4
Switch2
int1
int2
int3
int4
int5
int6
int7
int8
Switch3
int1
int2
int3
int4
int5
int6
int7
请使用Python 3代码帮助计算每个Switch(Switch1、2、3)下的所有项目。如果这样的话,我确实将开关列表放在一个单独的文件中。
答案 0 :(得分:2)
假设文件内容存储在变量s
中,则可以将re.split
与对迭代器的dict理解一起使用,以获取由开关名称索引的dict中的计数:
import re
i = iter(re.split('(Switch\d+)\n', s)[1:])
print({k: len(v.splitlines()) for k, v in zip(i, i)})
使用示例输入,将输出:
{'Switch1': 4, 'Switch2': 8, 'Switch3': 7}
答案 1 :(得分:2)
遍历文件。每行要么是一个新的开关,要么是要计数的东西:
switches = {}
latest = None
with open('data.txt') as f:
for line in f:
if line.startswith('Switch'):
latest = line.strip()
else:
switches[latest] = switches.get(latest, 0) + 1
或者,您可以使用collections.defaultdict
而不是get
来确保为每个新键正确填充字典:
from collections import defaultdict
switches = defaultdict(int)
with open('data.txt') as f:
for line in f:
if line.startswith('Switch'):
latest = line.strip()
else:
switches[latest] += 1
答案 2 :(得分:-1)
我会到达每一行,并且每次遇到包含字符串“ Switch”的行时,我都会计算下一行以及所有后续行,直到到达包含“ Switch”的另一行,然后将其重置为您的物品计数器并重复。