在python中使用“床”文件

时间:2014-08-08 23:27:56

标签: python

我有一个.bed文件,其中包含1000行,每行中的单词由制表符(\ t)分隔。如果我们将每个单词视为一列,则每行有12列。 我需要一种方法将此.bed文件转换为矩阵,以便我可以轻松访问其列。 例如,我需要访问第12列。有什么方法可以做到吗?

我已经尝试过这个:

    import numpy as np
    data = np.genfromtxt("myFile.bed")

但它无法正常工作。 有人可以帮我吗?

3 个答案:

答案 0 :(得分:2)

BED文件是标准制表符分隔的文本文件。涂通常的方式将其内容存储在内存中:

content = []
with open("myFile.bed")as f:
    for line in f:
        content.append(line.strip().split())

您可以在此处使用numpy数组而不是列表,或者如果需要,可以使用np.asarray转换结果。

实际上很少需要一个矩阵,因为它们代表(基因组?)区间并且通常非常大。大多数情况下,您在循环中的每一行修改/读取/执行某些功能:

with open("myFile.bed")as f:
    for line in f:
        L = line.strip().split()
        # ... do something with L

否则,Pandas库实现"数据帧"就像在R(但我从未使用过它)。

答案 1 :(得分:1)

使用pyranges,这很简单

import pyranges as pr

path = pr.get_example_path("aorta.bed")

gr = pr.read_bed(path)
# +--------------+-----------+-----------+------------+-----------+--------------+
# | Chromosome   | Start     | End       | Name       | Score     | Strand       |
# | (category)   | (int32)   | (int32)   | (object)   | (int64)   | (category)   |
# |--------------+-----------+-----------+------------+-----------+--------------|
# | chr1         | 9939      | 10138     | H3K27me3   | 7         | +            |
# | chr1         | 9953      | 10152     | H3K27me3   | 5         | +            |
# | chr1         | 10024     | 10223     | H3K27me3   | 1         | +            |
# | chr1         | 10246     | 10445     | H3K27me3   | 4         | +            |
# | ...          | ...       | ...       | ...        | ...       | ...          |
# | chr1         | 9978      | 10177     | H3K27me3   | 7         | -            |
# | chr1         | 10001     | 10200     | H3K27me3   | 5         | -            |
# | chr1         | 10127     | 10326     | H3K27me3   | 1         | -            |
# | chr1         | 10241     | 10440     | H3K27me3   | 6         | -            |
# +--------------+-----------+-----------+------------+-----------+--------------+
# Stranded PyRanges object has 11 rows and 6 columns from 1 chromosomes.
# For printing, the PyRanges was sorted on Chromosome and Strand.

df = gr.df
#    Chromosome   Start     End      Name  Score Strand
# 0        chr1    9939   10138  H3K27me3      7      +
# 1        chr1    9953   10152  H3K27me3      5      +
# 2        chr1   10024   10223  H3K27me3      1      +
# 3        chr1   10246   10445  H3K27me3      4      +
# 4        chr1  110246  110445  H3K27me3      1      +
# 5        chr1    9916   10115  H3K27me3      5      -
# 6        chr1    9951   10150  H3K27me3      8      -
# 7        chr1    9978   10177  H3K27me3      7      -
# 8        chr1   10001   10200  H3K27me3      5      -
# 9        chr1   10127   10326  H3K27me3      1      -
# 10       chr1   10241   10440  H3K27me3      6      -

答案 2 :(得分:1)

个人在安装 pyranges 时遇到问题。

我使用了 bed-reader,来自他们的示例:

from bed_reader import open_bed, sample_file

bed = open_bed("myFile.bed")
val = bed.read()