2012-06-10 4 views
1

Я пытаюсь создать некоторые файлы для генетического анализа. Я начинающий питон. Файлы, которые я хочу сделать, должны быть 3 столбца, разделенные вкладки, первый столбец всегда один и тот же (номер хромосомы) и окна второго и третьего столбцов размером 200, начинающиеся с нуля и заканчивающиеся на конце хромосомы. Например:Python скрипт для создания базового файла с информацией о хромосомах

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, но поскольку мне нужно указать размер хромосомы, я думаю, что мне придется делать каждый файл отдельно.

Заранее благодарен!

ответ

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() в случае, если вам интересно.

+0

хорошо, но я получаю сообщение об ошибке «нулевой длины имени поля в формате» – user964689

+0

@are вы используете Python 2.6? Тогда просто измените ответ, но вам нужно только это: 'outfp.write ('{0} {1: 4d} {2: 4d} \ n'' ... – Levon

+0

Я действительно. Спасибо, хотя как я должен сначала определить шаги? – user964689

1

Я предлагаю вам использовать функцию numpy.savetxt, чтобы сохранить данные в текстовый файл:

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

я получаю «нп не определена ошибка» после того, как я импортировать Numpy – user964689

+0

извините, я использовал импорт NumPy, как нп –