python中文本文件值的平均值

python中文本文件值的平均值,python,python-3.x,Python,Python 3.x,我有一个文本文件,其中包含多个端口之间的当前数据,如: 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解决这个问题?我想的代码是 i

我有一个文本文件,其中包含多个端口之间的当前数据,如:

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))
这个怎么样

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时,让我们试着充分利用它,或者至少尽我所能地利用它:)

首先,我把整个文件从中分割成当前的
文件,它给出了

 A:
B - 10
C - 6

------------------------------------------
 B:
A - 11
C - 4

------------------------------------------
 C:
A - 5
B - 5
从那里提取更容易,在
处拆分以获取第一个字母,然后
最后一个
以获取对并相应地处理它们

>>> 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
>>> 

我真的不知道你想要什么。这个文件有从一个端口到多个端口的电流。通常,两个端口之间的电流是相同的,但在输出时,值是四舍五入的,所以我要做的是找到相似端口之间的平均值并输出值。例如A-B是10,B-A是11,但是输出应该说A-B的电流是10.5,这听起来是个有趣的问题。让这成为一个python问题的python代码在哪里?我添加了一个示例代码,我的主要问题是如何删除重复项,以及是否有其他方法可以解决这个问题,谢谢!进程子例程就是我要找的:)