让Python以3(密码子)的块读取文本文件并给我一个输出

时间:2014-11-19 13:46:44

标签: python string-split

我有一个包含3列的文本文件 - 终止密码子,跳过上下文和102个碱基的序列,它们在跳过上下文之后立即出现,看起来有点像这样

TAG GTTAGCT CTCGTGGTCCTCAAGGACTCAGAAACCAGGCTCGAGGCCTATCCCAGCAAGTGCTGCTCTGCTCTGCCCACCCTGGGTTCTGCATTCCTATGGGTGACCC
TAG GTTAGCT CTTATTCCCAGTGCCAGCTTTCTCTCCTCACATCCTCATAATGGATGCTGACTGTGTTGGGGGACAGAAGGGACTTGGCAGAGCTTTGCTCATGCCACTC
TAG GTTAGCT CTATTGTGTAACTGAGCAATTCTTTTCACTCTTGTGACTATCTCAGTCCTCTGCTGTTTTGTAACTGGTTTACCTCTATAGTTTATTTATTTTTAAATTA

等...

我想知道如何编写一个程序来读取该文本文件的第3列(即102基本序列),我需要它以三个块的形式读取并从序列中挑选出任何终止密码子 - ' TAG','TGA'或'TAA'并创建一个列表或表格或类似的东西告诉我每个序列是否包含任何这些终止密码子,如果是,包含多少。

到目前为止,我已经这样做了,让Python只读取该文本文件的第3列:

inFile = open('test stop codon plus 102.txt', 'rU')
outFile = open('TAG plus 102 reading inframe.txt', 'w')


for line in inFile:
    parts = line.split('\t')
    stopcodon = parts[0]
    skippingcontext = parts[1]
    plus102 = parts[2]`

但我不确定下一步该去哪里。

提前致谢!

4 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题,但你可以尝试一下。

的Python:

input = """TAG GTTAGCT CTCGTGGTCCTCAAGGACTCAGAAACCAGGCTCGAGGCCTATCCCAGCAAGTGCTGCTCTGCTCTGCCCACCCTGGGTTCTGCATTCCTATGGGTGACCC
TAG GTTAGCT CTTATTCCCAGTGCCAGCTTTCTCTCCTCACATCCTCATAATGGATGCTGACTGTGTTGGGGGACAGAAGGGACTTGGCAGAGCTTTGCTCATGCCACTC
TAG GTTAGCT CTATTGTGTAACTGAGCAATTCTTTTCACTCTTGTGACTATCTCAGTCCTCTGCTGTTTTGTAACTGGTTTACCTCTATAGTTTATTTATTTTTAAATTA"""

for line in input.split("\n"):
    print(line)
    stopcodon, skippingcontext, plus102 = line.split()
    words = [plus102[s:s+3] for s in range(0, len(line.strip()) - 3)]
    for stopword in ["TAG", "TGA", "TAA"]:
        c = words.count(stopword)
        print("{} {}".format(stopword, c))

输出:

TAG GTTAGCT CTCGTGGTCCTCAAGGACTCAGAAACCAGGCTCGAGGCCTATCCCAGCAAGTGCTGCTCTGCTCTGCCCACCCTGGGTTCTGCATTCCTATGGGTGACCC
TAG 0
TGA 1
TAA 0
TAG GTTAGCT CTTATTCCCAGTGCCAGCTTTCTCTCCTCACATCCTCATAATGGATGCTGACTGTGTTGGGGGACAGAAGGGACTTGGCAGAGCTTTGCTCATGCCACTC
TAG 0
TGA 1
TAA 1
TAG GTTAGCT CTATTGTGTAACTGAGCAATTCTTTTCACTCTTGTGACTATCTCAGTCCTCTGCTGTTTTGTAACTGGTTTACCTCTATAGTTTATTTATTTTTAAATTA
TAG 1
TGA 2
TAA 3

答案 1 :(得分:0)

您已经拥有plus102部分,好的。你确定“我需要它来阅读三分之一”吗?然后,这是你的问题,这个问题已经在SO上得到了回答:

答案 2 :(得分:0)

要读取102nt序列3乘3:

by3 = [plus102[i:i+3] for i in range(0,len(plus102),3)]

找到其中终止密码子的位置(序列中):

stops = [(3*i,x) for i,x in enumerate(by3) if x in ["TAG","TGA","TAA"]]

你还需要考虑阶段吗?

要写入文件:

g = open("outfile.txt", "w")
for (i,x) in stops:
    g.write("Stop codon " + x + " found at position " + str(i) + "\n")
g.close()

您可以考虑字符串格式,制表符分隔的输出(请参阅join)等。

答案 3 :(得分:0)

如果您只想计算" TAG"," TGA"和" TAA"在plus102

import re
numberOfCodons = len(re.findall(r'(TAG|TGA|TAA)'), plus102)

注意:这将获得字符串中pattern的所有非重叠匹配,作为字符串列表(请参阅here),而不仅仅是三个块。