В NInject, с которым вы отметили это, вы вводите автоматически созданный Factory в форме Func
, используя FuncModule, как описано в этом сообщении .
Этот подход также доступен в autofac для одного.
Различные ответы Factory method рассматриваются в ответах на этот вопрос .
EDIT: NB Хотя это может быть интересно, воспользуйтесь решением @Remo Gloor (и критически советуем избегать такого решения)
Не уверен, является ли это вопросом для Unix & amp; Linux stackexchange. Это больше похоже на общий вопрос программирования.
Тем не менее, я бы посоветовал вам изучить использование pandas
.
Вы можете импортировать файл примера в виде кадра данных, указав схему вкладки следующим образом:
import pandas as pd
df = pd.read_csv('/tmp/samplefile.csv',sep='\t')
Если вы знаете, что startpos всегда будет меньше, чем endpos, вы можете найти вывод, который вы ' ищите, взяв максимум df['startpos']
и минимум df['endpos']
.
Существуют инструменты, предназначенные специально для работы с данными формата BED, которые вы бы хорошо изучили. bedtools , вероятно, является наиболее распространенным и простым в получении, и у него есть доступная оболочка для python , если вам абсолютно необходимо использовать python.
Инструмент multiIntersectBed - это то, что вам, вероятно, нужно, и его следует использовать довольно просто:
Пример использования:
== Input files: ==
$ cat a.bed
chr1 6 12
chr1 10 20
chr1 22 27
chr1 24 30
$ cat b.bed
chr1 12 32
chr1 14 30
$ cat c.bed
chr1 8 15
chr1 10 14
chr1 32 34
$ cat sizes.txt
chr1 5000
== Multi-intersect the files: ==
$ multiIntersectBed -i a.bed b.bed c.bed
chr1 6 8 1 1 1 0 0
chr1 8 12 2 1,3 1 0 1
chr1 12 15 3 1,2,3 1 1 1
chr1 15 20 2 1,2 1 1 0
chr1 20 22 1 2 0 1 0
chr1 22 30 2 1,2 1 1 0
chr1 30 32 1 2 0 1 0
chr1 32 34 1 3 0 0 1
== Multi-intersect the files, with a header line (titles are the file names): ==
$ multiIntersectBed -header -i a.bed b.bed c.bed
chrom start end num list a.bed b.bed c.bed
chr1 6 8 1 1 1 0 0
chr1 8 12 2 1,3 1 0 1
chr1 12 15 3 1,2,3 1 1 1
chr1 15 20 2 1,2 1 1 0
chr1 20 22 1 2 0 1 0
chr1 22 30 2 1,2 1 1 0
chr1 30 32 1 2 0 1 0
chr1 32 34 1 3 0 0 1
== Multi-intersect the files, with a header line and custom names: ==
$ multiIntersectBed -header -i a.bed b.bed c.bed -names A B C
chrom start end num list A B C
chr1 6 8 1 A 1 0 0
chr1 8 12 2 A,C 1 0 1
chr1 12 15 3 A,B,C 1 1 1
chr1 15 20 2 A,B 1 1 0
chr1 20 22 1 B 0 1 0
chr1 22 30 2 A,B 1 1 0
chr1 30 32 1 B 0 1 0
chr1 32 34 1 C 0 0 1
== Multi-intersect the files, showing empty regions (note, requires -g): ==
$ multiIntersectBed -header -i a.bed b.bed c.bed -names A B C -empty -g sizes.txt
chrom start end num list A B C
chr1 0 6 0 none 0 0 0
chr1 6 8 1 A 1 0 0
chr1 8 12 2 A,C 1 0 1
chr1 12 15 3 A,B,C 1 1 1
chr1 15 20 2 A,B 1 1 0
chr1 20 22 1 B 0 1 0
chr1 22 30 2 A,B 1 1 0
chr1 30 32 1 B 0 1 0
chr1 32 34 1 C 0 0 1
chr1 34 5000 0 none 0 0 0
Затем можно выполнить фильтрацию по 4-му столбцу, чтобы удовлетворить ваши оговоренные состояние для регионов.