打开保存为字典的多个文件

时间:2016-10-24 13:57:58

标签: python dictionary bioinformatics biopython

用户输入是实验的名称和包含数据的文件。在数据操作之后,我保存在一个字典中,文件中的样本(行)对应于哪个实验。 例如,(有时样本可以属于多个实验,或者一个或没有)

exp_sample["sample1"]=['experiment5','experiment6']
exp_sample["sample3"]=['experiment5']

在再次解析数据文件时(第二次)我想将样本行写入相应的实验文件中。这意味着,在解析数据文件时应该打开所有实验文件。我的想法如下:

experiment_files = {exp: open(exp+".fastq",'w') for exp in experiments}
for read in SeqIO.parse(fastq, 'fastq'):
    experiment = exp_sample[sample.id]
    #if sample belongs only to one experiment
    #or sample belongs to two the same experiments
    if len(experiment)==1 or (len(exp)==2 and (exp[0]==exp[1]))
        SeqIO.write(read,exp_files[experiment[0]],'fastq')
(x.close() for x in experiment_files.values())

我的问题是,打开保存在dict中的文件然后以这种方式关闭它们是否合法?或者还有其他更聪明的方法吗?

PS。我知道,我可以将样本行保存到相应实验的列表中,然后将所有实验记录写入实验文件中,但数据文件可以是几GB。

1 个答案:

答案 0 :(得分:0)

我们在评论中讨论后,我更新了原来的答案。

如果要打开多个文件,可以使用上下文管理器ExitStack来执行此操作。

以下是一个示例代码:

with ExitStack() as stack:
    files = [stack.enter_context(open(fname)) for fname in filenames]

files列表中的每个元素代表您打开的一个文件。