Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中多个文件的求和和平均值_Python_Add_Mean - Fatal编程技术网

Python中多个文件的求和和平均值

Python中多个文件的求和和平均值,python,add,mean,Python,Add,Mean,我有一个关于Python输出的问题 我有以下3个文件作为输入数据: 归档 abc带-1-花环-n2 abc带-1-轮胎-n 1 带-1-重量-n2的abc 文件B def带-1-玫瑰花结-n 1 带1号轮胎和2号轮胎的def def约1位 文件C ghi带-1-玫瑰花结-n 2 ghi as+n-生产-v 1 ghi-then-damage-V1 我首先尝试创建一个脚本,在该脚本中,我将考虑COL 2交集的值(COL 3)的总和。p> 这工作正常-正确输出所有行 我试图修改脚本来考虑CO

我有一个关于Python输出的问题

我有以下3个文件作为输入数据:

归档
abc带-1-花环-n2
abc带-1-轮胎-n 1
带-1-重量-n2的abc
文件B
def带-1-玫瑰花结-n 1
带1号轮胎和2号轮胎的def
def约1位
文件C
ghi带-1-玫瑰花结-n 2
ghi as+n-生产-v 1
ghi-then-damage-V1

我首先尝试创建一个脚本,在该脚本中,我将考虑COL 2交集的值(COL 3)的总和。p> 这工作正常-正确输出所有行

我试图修改脚本来考虑COL 2交集的COL 3值的平均值,这是我遇到麻烦的地方。< /P> 基本上,脚本不会输出交点的线

脚本A
def sumVectors(A类填充、B类填充、输出文件):
类_dictA={}
开放式(A类填充物,“rb”)作为开放式填充物:
对于打开的填充中的线:
items=line.split()
等级A、专长、价值A=项目[:3]
等级dictA[专长]=浮动(valuesA)
类_dictB={}
打开(B类填充,“rb”)作为打开的填充:
对于开放式填充中的线:
items=line.split()
等级B,专长,价值B=物品[:3]
class_dictB[feat]=浮动(valuesB)
以open(输出文件,“wb”)作为输出文件:
对于课堂主语:
如果输入B类:
权重=(类别目录[键]+类别目录[键])/2
outstring=“\t”。连接([classA+”-“+classB,键,str(重量)])
打印输出
其他:
重量=等级[key]
outstring=“\t”。连接([classA+”-“+classB,键,str(重量)])
输出\u文件。写入(超出+“\n”)
对于B类中的键:
如果钥匙不在课堂上:
重量=等级B[键]
outstring=“\t”。连接([classA+”-“+classB,键,str(重量)])
输出\u文件。写入(超出+“\n”)
当我试图合并第三个文件时:我遇到了一个关键问题。在这里,我试图看看文件C中的一个键是否也在文件a和B中,如果是,我们取这三个文件的平均值。在这种情况下,当它进入第一个
if
块时,它给了我一个关键错误,因此我很难解决这个问题

下面是考虑3个文件的脚本示例

脚本B
def sumVector(A类填充、B类填充、C类填充、输出文件):
类_dictA={}
开放式(A类填充物,“rb”)作为开放式填充物:
对于打开的填充中的线:
items=line.split()
等级A、专长、价值A=项目[:3]
等级dictA[专长]=浮动(valuesA)
类_dictB={}
打开(B类填充,“rb”)作为打开的填充:
对于开放式填充中的线:
items=line.split()
等级B,专长,价值B=物品[:3]
class_dictB[feat]=浮动(valuesB)
类_dictC={}
打开(C类填充,“rb”)作为打开的填充C:
对于开放式填充C中的线:
items=line.split()
等级C,专长,价值C=项目[:3]
class_dictC[feat]=浮动(valuesC)
以open(输出文件,“wb”)作为输出文件:
对于课堂上的关键内容:
如果输入class_dictA和class_dictB:
权重=(类别dictA[key]+类别dictB[key]+类别dictC[key])/3
outstring=“\t”。连接([classA+”-“+classB+”-“+classC,键,str(重量)])
打印输出
其他:
重量=等级[key]
outstring=“\t”。连接([classA+”-“+classB+”-“+classC,键,str(重量)])
输出\u文件。写入(超出+“\n”)
在脚本A的情况下,所需的输出将是:

(我们考虑COL 2中的公共元素的平均值):

abc def带-1-玫瑰花结-n 1.5
abc def带-1-轮胎-n 1
abc def带-1-重量-n 2
带1号轮胎和2号轮胎的def
def约1位
在脚本B的情况下,所需的输出将是:

文件B (我们考虑COL 2中所有3个文件的公共元素的平均值):

abc def ghi带-1-玫瑰花结-n 1.667
abc def ghi带-1-轮胎-n 1.5
abc def ghi带-1-重量-n 2
abc def ghi带-1-玫瑰花结-n 1.5
abc def ghi约位n 1
abc def ghi as+n-PRODUCT-v 1
abc def ghi然后损坏-v 1
有谁能帮我看看哪里出了问题,我不确定用什么最好的方法来解决这个问题。。。
谢谢。

您似乎在为每个文件显示列2的并集,而不是交集(并集=出现在任何文件中的所有值,交集=仅出现在所有文件中的值)。哪一个是正确的?第一个脚本为文件A和文件B输出
abc def with-1-tyre-n 1.5
abc def with-1-rosette-n 1.5
。这不是您想要的吗?旁白:如果您确实这样做是因为需要结果,那么您应该查看如下库:,这使得对数据执行分组操作更加容易。如果您这样做是为了学习,请继续。:^)@HughBothwell我想输出union,但每个文件中这些公共值的平均值。@TomFenech我想输出所有
from collections import defaultdict

# Because you are looking for a union of files, we can treat
#  the input data as a simple concatenation of all input files;
# If you were after intersection, we would have to deal with
#  each input file separately.
def chain_from_files(*filenames):
    for fname in filenames:
        with open(fname, "rb") as inf:
            for line in inf:
                yield line

# get the key and all related data for each line
def get_item(line):
    row = line.split()
    return row[1], (row[0], int(row[2]))    # <= returns a tuple ('abc', 2)

# iterate through the input,
# collect a list of related values for each key
def collect_items(lines, get_item):
    result = defaultdict(list)
    for line in lines:
        key, value = get_item(line)
        result[key].append(value)
    return result

# make an output-string for each key
# and its list of related values
def show_item(key, values):
    classes, nums = zip(*values)          # <= unpacks the tuples
    classes = '-'.join(sorted(set(classes)))
    average = float(sum(nums)) / len(nums)
    return "{} {} {}\n".format(classes, key, average)

def main():
    lines = chain_from_files(classA_infile, classB_infile, classC_infile)
    data  = collect_items(lines, get_item)

    with open(outputfile, "wb") as outf:
        for key,value in data.items():
            outf.write(show_item(key, value))

if __name__=="__main__":
    main()
ghi then-damage-v 1.0
abc-def with-1-tyre-n 1.5
abc-def-ghi with-1-rosette-n 1.66666666667
ghi as+n-produce-v 1.0
abc with-1-weight-n 2.0
def about-bit-n 1.0