首页>Program>source

我有以下文件:

文件

我需要能够构建字典并使用来自多个csv文件的数据填充它

每个文件的内部显示如下:

所以我的问题是我需要逐行收集目录循环中的所有文件,并将相关数据分离到如图所示的字典中。

这是我到目前为止所拥有的-我正在设法遍历目录并获取每个文件名,但是我不确定如何逐行读取每一行以解析出进入字典时所需的数据

from glob import glob
import os
from os.path import basename
import csv
import numpy as np
def main():
    rts = {}
    directory = 'C:/Users/oli.warriner/Desktop/data(2)/data/'
    files = sorted(glob('C:/Users/oli.warriner/Desktop/data(2)/data/*.csv'))
    sfiles = [basename(filepath) for filepath in files]
    for f in sfiles:
        path = os.path.join(directory, f)
        singleFile = csv.DictReader(open(path, 'r'))
        for line in singleFile:
            if f not in rts:
                rts[f] = []
                if line['condition'] not in rts[f]:
                    rts[ line['condition']] = []
                rts[ line['condition']].append(float (line['rt']))
    for condition in rts.keys():
        data = np.array(rts[condition])
        m = data.mean()
        v = data.var()

if __name__ == "__main__":
    main()

当前字典输出:

{'congruent': [0.647259, 0.720116, 0.562909, 0.538918, 0.633367, 0.668142, 1.820112, 0.798532, 0.470939, ...],
'incongruent': [0.767041, 0.990185, 0.693017, 0.679368, 0.951432, 1.289047, 0.647722, 0.858307, 1.118404, ...]}

所需的输出:

results = {'PO1': 
        {'Congruent': 
            {'rt':  {0.4, 0.5, 0.8, 0.5, 0.6}},
            {'correct': {TRUE, FALSE, TRUE, TRUE, FALSE}}
        },
        {'Incongruent': 
            {'rt':  {0.4, 0.5, 0.8, 0.5, 0.6}},
            {'correct': {TRUE, FALSE, TRUE, TRUE, FALSE}}           
        }
       },
       {'PO2': 
        {'Congruent': 
            {'rt':  {0.4, 0.5, 0.8, 0.5, 0.6}},
            {'correct': {TRUE, FALSE, TRUE, TRUE, FALSE}}
        },
        {'Incongruent': 
            {'rt':  {0.4, 0.5, 0.8, 0.5, 0.6}},
            {'correct': {TRUE, FALSE, TRUE, TRUE, FALSE}}           
        }
       },
       {'PO3': 
        {'Congruent': 
            {'rt':  {0.4, 0.5, 0.8, 0.5, 0.6}},
            {'correct': {TRUE, FALSE, TRUE, TRUE, FALSE}}
        },
        {'Incongruent': 
            {'rt':  {0.4, 0.5, 0.8, 0.5, 0.6}},
            {'correct': {TRUE, FALSE, TRUE, TRUE, FALSE}}           
        }
       }

我需要能够将rt值嵌套在每个条件内,并嵌套每个条件的正确值.这也需要按文件分开并存储在字典中。

我将使用字典为每个条件计算均值和stddev反应时间。 任何帮助是极大的赞赏.如果我在任何地方都不太清楚,请随时提问

最新回答
  • 1月前
    1 #

    下面的代码将填充 rts   具有期望值的字典.我已经离开了   故意分开.我想您从那里接起飞机不会有问题。

    由于 numpy,它需要Python 3.4+ :

    pathlib
    

    希望它对您有所帮助。

    import csv from pathlib import Path def main(): rts = {} data = Path('C:/Users/oli.warriner/Desktop/data(2)/data') for csvfile in data.glob('*.csv'): key = csvfile.stem with csvfile.open() as f: csv_reader = csv.reader(f) # Skip the header _ = next(csv_reader) rts[key] = { 'congruent': { 'rt': [], 'correct': [] }, 'incongruent': { 'rt': [], 'correct': [] }, } for tn, ctext, cname, condition, response, rt, correct in csv_reader: rts[key][condition]['rt'].append(float(rt)) rts[key][condition]['correct'].append(correct)

  • python:挂在多处理队列中
  • 具有ManyToOne关系的JPA实体JSON序列化