【问题标题】:Python script to make basic file with chromosome information用于制作包含染色体信息的基本文件的 Python 脚本
【发布时间】:2012-06-10 10:50:33
【问题描述】:

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

提前致谢!

【问题讨论】:

    标签: python loops python-2.6 genetics


    【解决方案1】:

    这个怎么样:

    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() 函数的更多信息。

    【讨论】:

    • @你使用的是 Python 2.6 吗?那么简单的改变,我会更新答案,但你只需要这个:outfp.write('{0} {1:4d} {2:4d}\n' ...
    • 我确实是。谢谢,不过我应该如何首先定义步骤?
    • 哦最后一件事,如何使列制表符分隔?
    • @user964689 只需在字段之间添加\t,我会为您更新答案,所有会改变的是最后一行。
    • 很抱歉,脚本正在运行,并且似乎按照我的要求进行。但是当我将它作为需要制表符分隔文件的程序的输入运行时,它似乎不接受它。我不知道当我打开文件时问题是什么,它似乎是制表符分隔的。也许结局使用了一个未被接受的隐形角色?
    【解决方案2】:

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

    windows = range(0, 55268282, 200)
    numpy.savetxt('Chr20.bed', numpy.transpose((windows[:-1], windows[1:])), fmt=('chr20\t%d\t%d'))
    

    【讨论】:

    • 对不起,我使用 import numpy as np
    猜你喜欢
    • 1970-01-01
    • 2016-03-14
    • 2018-12-14
    • 1970-01-01
    • 2020-04-21
    • 2016-10-27
    • 2019-05-24
    • 2021-12-06
    • 1970-01-01
    相关资源
    最近更新 更多