我正在尝试制作一些用于遗传分析的.bed文件。我是一个蟒蛇初学者。我想要制作的文件应该是3列,制表符分隔,第一列总是相同(染色体编号),第2和第3列窗口大小为200,从零开始,到染色体末尾结束。例如:
chr20 0 200
chr20 200 400
chr20 400 600
chr20 600 800
...
我有染色体的大小所以此刻我正试图说'第2栏< (铬的大小)打印线。我有一个脚本的骨架,但由于我缺乏经验,它不太合适。以下是我到目前为止的情况:
output = open('/homw/genotyping/wholegenome/Chr20.bed', 'rw')
column2 = 0
column1 = 0
while column2 < 55268282:
for line in output:
column1 = column1 + 0
column2 = column2 + 100
print output >> "chr20" + '\t' + str(column1) + '\t' + str(column2)
如果任何人都可以修复这个简单的脚本,以便它像我所描述的那样,或者写一个更好的解决方案,真的很感激。我考虑制作一个脚本,可以输出20条染色体和chrX的所有文件但是因为我需要指定染色体的大小,我想我必须分别做每个文件。
提前致谢!
答案 0 :(得分:2)
这个怎么样:
step = 200 # change values by this amount
with open('Chr20.bed', 'w') as outfp:
for val in range(0, 1000, step): #increment by step, max value 1000
outfp.write('{0}\t{1:d}\t{2:d}\n'.format('chr20', val, val+step))
根据请求提供制表符分隔的输出
chr20 0 200
chr20 200 400
chr20 400 600
chr20 600 800
chr20 800 1000
注意:使用with
会在您完成后自动关闭该文件,或者遇到异常。
如果您感到好奇,这会提供有关.format()功能的更多信息。
答案 1 :(得分:1)
我建议您使用numpy.savetxt
函数将数据保存到文本文件中:
windows = range(0, 55268282, 200)
numpy.savetxt('Chr20.bed', numpy.transpose((windows[:-1], windows[1:])), fmt=('chr20\t%d\t%d'))