1

我正在尝试制作一些用于遗传分析的 .bed 文件。我是python初学者。我要制作的文件应该是 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 的所有文件,但由于我需要指定染色体的大小,我认为我必须分别处理每个文件。

提前致谢!

4

2 回答 2

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

注意: usingwith将在您完成或遇到异常时自动为您关闭文件。

如果您好奇,这将提供有关.format()函数的更多信息。

于 2012-06-10T10:57:50.213 回答
1

我建议您使用该numpy.savetxt函数将数据保存到文本文件中:

windows = range(0, 55268282, 200)
numpy.savetxt('Chr20.bed', numpy.transpose((windows[:-1], windows[1:])), fmt=('chr20\t%d\t%d'))
于 2012-06-10T10:56:41.533 回答