这是练习嵌套字典,或字典数组,字典列表等。
在C/C++中,数据结构可以最好地描述为结构/类的数组,每个结构都有多个成员。对我的挑战:
1). 在每条记录的开头有字符串“示例名称”作为分隔符,后跟多个成员;
2). 每行6个记录成员,用冒号分隔“;
3). 如何将多行(而不是同一行的多个字段,这更容易解析)读入记录的成员中;
4). 记录分隔符前面不能有空行。
我将样本输入和预期输出放入测试中。
示例:输入文件
Sample Name: CanNAM1_192 SNPs : 5392 MNPs : 0 Insertions : 248 Deletions : 359 Phased Genotypes : 8.8% (2349/26565) MNP Het/Hom ratio : - (0/0) Sample Name: CanNAM2_195 SNPs : 5107 MNPs : 0 Insertions : 224 Deletions : 351 Phased Genotypes : 8.9% (2375/26560) MNP Het/Hom ratio : - (0/0) Sample Name: CanNAM3_196 SNPs : 4926 MNPs : 0 Insertions : 202 Deletions : 332 Phased Genotypes : 8.0% (2138/26582) MNP Het/Hom ratio : - (0/0)
在awk中,有记录分隔符RS和字段分隔符FS可以在开始时设置,但据我所知,python中没有这样的函数。你知道吗
输出.tab:
CanNAM1_192 5392 0 248 359 8.8% - CanNAM2_195 5107 0 224 351 8.9% - CanNAM3_196 4926 0 202 332 8.0% -
尝试搜索一些示例代码来查找我的案例,例如one,this one
import sys
filename=sys.argv[1]
Dictn = {}
with open(filename, 'r') as fh:
for line in fh:
while True:
if line.startswith('Sample Name'):
nameLine = line.strip()
ID = nameLine.split(':')
else:
line2 = next(fh).strip()
line2 = line2.split(':')
print (line2[0], line2[1]) # For debugging to see the parsing result
line3 = next(fh).strip().split(':')
line4 = next(fh).strip().split(':')
line5 = next(fh).strip().split(':')
line6 = next(fh).strip().split(':')
line7 = next(fh).strip().split(':')
Dictn.update({
ID[1]: {
line2[0]: line2[1],
line3[0]: line3[1],
line4[0]: line4[1],
line5[0]: line5[1],
line6[0]: line6[1],
line7[0]: line7[1],
}
})
break
print(Dictn)
Dictn.get('CanNAM1_192')
# {CanNAM1_192:{ {'SNPs' : '5392'}, {'MNPs' : '0'}, {'Insertions' : '248'}, {'Deletions' : '359'}, {'Phased Genotypes' : '8.8%'}, {'MNP Het/Hom ratio' : '-'} }}
我一直在解析每条记录,每次读7行,然后将记录推入/更新到字典中。不擅长Python,我真的很感谢任何帮助!你知道吗
Sample Name
开头,我们知道id将位于冒号和空格之后。我们可以用这些字符来划分。id将是分割行的第二部分,因此我们只得到索引1处的项。你知道吗name
)。为该id创建一个空的嵌套字典条目:
。变量的名称在左边,第一项在右边,值在右边,所以第二项在右边。一定要把两边多余的空间都去掉。你知道吗在这个问题上花了更多的时间,得到了一个解决方案,它看起来是“强>不<强”>“Python”,因为我的代码处理第一个“记录”(8行数据,包括底部的空白行)是其余的冗余。你知道吗
我错过了什么?谢谢!你知道吗
相关问题 更多 >
编程相关推荐