python中文本文件值的平均值

2024-04-27 02:22:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件,其中包含多个端口之间的电流,例如:

current from A:
B - 10
C - 6

Current from B:
A - 11
C - 4

Current from C:
A - 5
B - 5

我需要找到相同端口之间的平均电流,我的输出应该是这样的:

current A-B is 10.5
current A-C is 5.5
current B-C is 4.5

我在考虑使用嵌套的键值对。有没有其他方法可以用python解决这个问题?我想的代码是

import re
pat = re.compile("current from")
current = {}
with open(fileName) as f:
    for line in f:
        if pat.search(line):
            key1 = (line.split()[2])
        elif line != "\n" :
            current[key1][line.split()[0]].append(line.split()[2])
for key1 in current:
  for key2 in current[key1]:
    avg = ((current[key1][key2] + current[key2][key1])/2)  
    print("current " + key1 + "-" + key2 + " is " + str(avg))

Tags: 端口infromreforislinecurrent
1条回答
网友
1楼 · 发布于 2024-04-27 02:22:19

这个怎么样

import re, collections

def extraer_data(fname):
    with open(fname) as file:
        for raw in re.split(r'current from', file.read(), flags= re.IGNORECASE ):
            raw = raw.strip()
            if raw:
                key,rest = raw.split(":")
                data = [ (c,int(n)) for c,n in re.findall("(\w+) - (\d+)",rest) ]
                yield (key, data)

def process(fname):
    data = collections.defaultdict(list)
    for p1, ports in extraer_data(fname):
        for p2, val in ports:
            data[frozenset((p1,p2))].append(val)
    for key,val in data.items():
        print( "current {} is {}".format("-".join(sorted(key)), sum(val)/len(val)))

当我们使用re时,让我们尽量使用它,或者至少尽我所能:)

首先,我把整个文件在current from处分开,这样就得到了

 A:
B - 10
C - 6

                     
 B:
A - 11
C - 4

                     
 C:
A - 5
B - 5

从那里提取更容易,在:处拆分以获得第一个字母,finall以获得成对的字母并相应地处理它们

>>> list(extraer_data("test.txt"))
[('A', [('B', 10), ('C', 6)]), ('B', [('A', 11), ('C', 4)]), ('C', [('A', 5), ('B', 5)])]
>>> 

一旦我们以上面显示的格式从文件中得到数据,就轮到把它们成对地分组了,由于顺序不相关,我把它们打包成一个frozenset,这样它们就可以用作字典键,对于所说的字典,我使用一个defaultdict的列表,一旦所有的东西都打包好了,剩下的就是小菜一碟

>>> process("test.txt")
current A-B is 10.5
current B-C is 4.5
current A-C is 5.5
>>> 

相关问题 更多 >