根据位置分离文件中的字母

时间:2016-02-27 23:54:06

标签: python split position

我有一个.fa文件,其字母序列如ACGGGGTTTTGGGCCCGGGGG和.txt文件,其中的数字显示开始和停止位置,如开始2停止7.我怎样才能从我的.fa文件中的特定位置提取字母并创建新的文件只包含指定位置的字母?我写了这样的代码,但我得到错误“字符串索引超出范围”'我的位置txtx文件只是点亮了[[1,52],[66,88] .....

等位置
my_file = open('dna.fa')
transcript = my_file.read()
positions = open('exons.txt')
positions = positions.read()
coding_sequence = '' # declare the variable

for i in xrange(len(positions)):
    start = positions[i][0]
    stop = positions[i][1]
    exon = transcript[start:stop]
    coding_sequence = coding_sequence + exon
print coding_sequence `

2 个答案:

答案 0 :(得分:0)

假设您的职位存储在名为positions的列表中,您的infile名称为infile.fa,并且您的outfile名称为outfile.fa

with open("infile.fa") as infile:
    text = infile.read()
    letters = "".join(text[i] for i in positions)
    with open("outfile.fa", "w") as outfile:
        outfile.write(letters)

正如@ KIDJourney的评论中所提到的,理论上这对于文件足够大以至于没有足够的内存来存储它可能会失败。如果是这样的话,你可以这样做:

with open("infile.fa") as infile:
    with open("outfile.fa", "a") as outfile:
        outfile.seek(0)
        i = 0
        for line in infile:
            for char in line:
                if i in positions:
                    outfile.write(char)
                i += 1

答案 1 :(得分:0)

如果您尝试使用非常大的文件来完成这项工作,@ zondo的解决方案可能会因缺少RAM而失败。

当您尝试阅读部分文件时,可以使用seek

def readData(filename , start_pos , end_pos):
    with open(filename) as f :
        f.seek(start_pos)
        data = f.read(end_pos - start_pos)
        return data