1

次のようなデータを含む .txt があります。

Header:ensembl gene ID|Ensembl Transcript ID|CDS start|CDS end|5'UTR start|5'UTR end|3'UTR start|3'UTR end|Transcripts start|Transcripts end
>ENSMUSG00000002477|ENSMUST00000002551|*some junk information*...etc.|
TCGCGCGTCCGCAGGCCTCCGCGCGCTTTTCCG....etc.
>ENSMUSG00000002835|ENSMUST00000002914|...etc.|
GCAGAAGTGACACCGGTGGGAGGCG...etc.

ENSMUSG0000000xxxx という名前のポイントに到達するためのコードが書かれています

.txt から持っている名前を次の行で選び出したいです。たとえば、"TACGTACG" を 3 つの形式で読みます。たとえば、"TAC" "GTA" です。

そして、同じことをしたいのですが、最初の文字から読むのではなく、2番目の文字から始めたいのですが、上記の例を使用すると、「ACG」と「TAG」が読み取られます

もう一度同じことをしますが、最初の 2 文字をスキップします

どうすればいいのか、特に3文字を読む部分が本当にわかりません。誰か手を貸してくれませんか?

これらは私がこれまでに持っているコードです:

import csv
import os.path
#open files + readlines
with open("C:/Users/Ivan Wong/Desktop/Placement/Lists of targets/Mouse/UCSC to Ensembl.csv", "r") as f:
reader = csv.reader(f, delimiter = ',')
#find files with the name in 1st row
for row in reader:
    graph_filename = os.path.join("C:/Users/Ivan Wong/Desktop/Placement/Interesting reading/3'ORF",row[0]+"_nt_counts.txt.png")
    if os.path.exists(graph_filename):
        y = row[0]+'_nt_counts.txt'  
        r = open('C:/Users/Ivan Wong/Desktop/Placement/fp_mesc_nochx/'+y, 'r')
        k = r.readlines()
        r.close
        del k[:1]
        k = map(lambda s: s.strip(), k)
        interger = map(int, k)   
        import itertools
        #adding the numbers for every 3 rows
        def grouper(n, iterable, fillvalue=None):
            "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
            args = [iter(iterable)] * n
            return itertools.izip_longest(*args, fillvalue=fillvalue)
        result = map(sum, grouper(3, interger, 0))
        e = row[1]
cDNA = open('C:/Users/Ivan Wong/Desktop/Placement/Downloaded seq/Mouse/cDNA.txt', 'r')
q = cDNA.readlines()
cDNA.close
#To delete the 1st line that I do not want at all
del q[:1]

今、私はアイデアを思いついたので、それらを段階的に分解したいと思います

1番目:.txt(qという名前)からリスト内の名前(eという名前)を見つけたい

2位:別の名前に到達するまで次の行を読ませたい(e)

3番目: 読み取った行を「A」、「T」、「C」、「G」、「A」、「A」などの単一の文字列に分割します。

4位:「ATC」、「GAA」のように3文字の読み上げを行う

5番目: それらをファイルに書き込んでから、4番目のステップに戻りますが、今回は2番目の文字から始めます

6番目:基本的に5番目のステップですが、今回は3番目の文字から始めます

私はこの考えを持っていますが、これを行うためのプログラミングの知識はありません。誰か助けてください

4

1 に答える 1

0

これは宿題ではないので、ここから始めましょう。'>'関心のある行がスライス操作で始まらない行であると仮定すると、ここで役立ちます。

with open('data.txt') as inf:
    for line in inf:
        if not line.startswith('>'):
            strings3 = [line[i:i+3]for i in range(len(line))]

関心のある 3 文字シーケンスを各行に収集します。

入力行:

GCAGAAGTGACACCGGTGGGAGGCG

出力

['GCA', 'CAG', 'AGA', 'GAA', 'AAG', 'AGT', 'GTG', 'TGA', 'GAC', 'ACA', 'CAC', 'ACC', 'CCG', 'CGG', 'GGT', 'GTG', 'TGG', 'GGG', 'GGA', 'GAG', 'AGG', 'GGC', 'GCG', 'CG\n', 'G\n', '\n']

行の文字数が 3 で割り切れない場合は、短い文字列と改行が得られることに注意してください。

grouperまた、最近提起した他の質問の関数を再利用できる場合もあります。

于 2012-07-31T11:57:54.463 に答える