请更新标题,如果你能想到一个好的!你知道吗
我有以下结构的数据:
chr pos A_block A_val
2 05 7 A,T,C
2 11 7 T,C,G
2 15 7 AT,C,G
2 21 7 C,A,GT
2 31 7 T,C,CA
2 42 9 T,C,G
2 55 9 C,G,GC
2 61 9 A,GC,T
2 05 12 AC,TG,G
2 11 12 A,TC,TG
预期输出:为了学习,我只想重写输出文件,与输入文件相同,但使用下面我建议的过程。
我想:step 01:
一次只读取两个连续块的值(前7&9)->;step 02:
将数据存储在以block numbers
为主唯一键的字典中->;step 03:
将字典返回到预定义函数进行解析。->;现在,读取块(9&12)—>;重复相同的过程直到结束。你知道吗
我在想:
import req_packages
from collections import defaultdict
''' make a function that takes data from two blocks at a time '''
def parse_two_blocks(someData):
for key, vals in someData:
do ... something
write the obtained output
clear memory # to prevent memory buildup
''' Now, read the input file'''
with open('HaploBlock_toy.txt') as HaploBlocks:
header = HaploBlocks.readline()
# only reads the first line as header
''' create a empty dict or default dict. Which ever is better?'''
Hap_Dict = {}
Hap_Dict = defaultdict(list)
''' for rest of the lines '''
for lines in HaploBlocks:
values = lines.strip('\n').split('\t')
''' append the data to the dict for unique keys on the for loop, until the number of unique keys is 2 '''
Block = values[2]
Hap_Dict[Block].append(values[3])
do something to count the number of keys - how?
if keys_count > 2:
return parse_two_blocks(Hap_Dict)
elif keys_count < 2 or no new keys: # This one is odd and won't work I know.
end the program
因此,当代码被执行时,它将从块7和块9读取数据,直到字典被填充并返回到预定义函数。解析完成后,它现在可以只保留前一个解析的后一个块中的数据。这样它只需要读取剩余的块。你知道吗
预期产量: 我现在的主要问题是一次只能读取两个块。我不想在“parse \u two \u blocks(someData)”中添加解析信息的内在细节-这只是另一个问题。但是,让我们尝试重写与输入相同的输出。你知道吗
将输入解析为一个动态的块列表(生成器)。在对上迭代。这一切都应该在你评估配对时完成。也就是说,这些行都不应该一次读取或存储整个csv文件。你知道吗
输出(of
one
):^{}
^{} 来自^{}
^{}
lambda x: x['A_block']
(k, list(v)) for k, v in blocks
^{} recipe
相关问题 更多 >
编程相关推荐