0

私は Python 初心者で、スクリプトの作成方法についてアドバイスをいただければ幸いです。私はスクリプトを効率的に計算する方法に精通していません。これは、現在のタスクにとって重要です。これは、大きなテキスト ファイルを調べることになるためです。(fyi は遺伝座標と vcf 形式のファイルです)

私は2つのファイルを持っています。File1 は、番号順に並べ替えられた座標/位置のタブ区切りのリストです。

chr1 100
chr1 200
chr1 300
chr2 10
chr2 300
chr2 500

File2 はタブで区切られた座標のリストで、詳細情報などがあります。

chr1 10 0/1 1/1 0/1 0/0
chr1 100 0/0 1/1 0/0 0/0
chr1 200 0/0 1/1 0/0 0/0
chr1 300 0/0 0/1 0/0 0/0
chr2 10 0/1 1/1 0/1 0/0

file1 のすべての位置は file2 にありますが、file 2 には追加の位置も含まれています。

file1 の各位置について、file2 を検索してその位置を見つけたいと思います。次に、トリッキーなビット (少なくとも私にとって) は、数値的に (列 2) <= 100 ポジションより小さく、<= 100 ポジションよりも大きいすべてのポジションを調べたいということです。したがって、ファイル 1 の位置が chr3 200 の場合、ファイル 2 で chr3 100 と chr3 300 の間にあるすべての位置を見つけたいと思います (列 1 の値も同じである必要があります。したがって、位置が chr2 30 の場合は必要ありません)。 chr2 0 に達すると、chr1 の値に戻ります。) これらの基準に一致する各位置について、これらの位置にあるすべての値を合計し (その部分は自分で行うことができます)、それらをスコアとして出力します。 file1 で指定された位置。

したがって、私が助けを必要としているビットは、ファイル 1 から各位置を読み取り、ファイル 2 でその位置を見つけ、ファイル 2 の 100 位置前に戻って、ファイル 2 内の 100 位置以内のすべての位置の読み取りを開始する方法です。 file1 で指定された位置の大きい方。次に、これが完了したら、そのサイトの値を出力し、file1 の次の位置を読み取り、同じことを続けます。

これは、これまでになんとか実行したコードの構造の大まかな例です。

file1 =  open('positions.txt', 'w')
file2 =  open('file2.vcf', 'w')
output =   open('output.txt', 'w')

#structure:

for line in file1:
    line = line.rstrip() 
    fields = line.split("\t")
    startposition = fields[0:1]

    for line in file2:
        line = line.rstrip() 
        fields = line.split("\t")

        if fields[0:1] = startposition:
            keep going back in file2 until fields[1] < (startposition[1] - 100)
            read next line (where fields[1] is >= startposition[1] - 100)
            storeddata += fields [2:5]

            continue for lines in file2 until fields[1] > (startposition[1] + 100)
                print >> output, str(startposition), "\t", str(storeddata)

それを構造化する方法とサンプルコードに関するコメントをいただければ幸いです。

明確にするべきことがあれば教えてください。

よろしくお願いします。

よろしくお願いします。

4

0 に答える 0