Python读取复杂的.txt文件

Python读取复杂的.txt文件,python,python-2.7,Python,Python 2.7,我有一个包含如下数据的.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.| TCGCGCGTCCGCAGGC

我有一个包含如下数据的.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”,以三重形式读取,例如“TAC”“GTA”

然后我想做同样的事情,但不是从第一个字母开始读,而是从第二个字母开始,使用上面的例子,它会读“ACG”和“TAG”

同样的事情,跳过前两个字母

我真的不知道该怎么做,尤其是阅读三个字母的部分。谁能帮我一下吗

以下是我目前掌握的代码:

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]
现在我有了一个想法,我想把它们按步骤分解

第一:我想从my.txt(名为q)中找出列表中的名字(我把它命名为e)

第二:我想让它读下一行,直到它到达另一个名字(e)

第三:把我读到的那些行分成一个字符串,比如“a”、“T”、“C”、“G”、“a”、“a”等等

第四:读3个字母的事情是这样的——“ATC”,“GAA”

第五步:把它们写进一个文件,然后回到第四步,但这次要从第二个字母开始

第6步:基本上是第5步,但这次从第3个字母开始


虽然我有这个想法,但我没有编程知识来做这件事,有人能帮我吗

,因为这不是家庭作业,这里有一个开始的方法。假设您感兴趣的行不是以
'>'
开头的行,那么切片操作在这里会有所帮助

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
功能。

这是一项作业,您正在寻找提示吗?如果不是的话,那不是真正的任务,而是某种形式的工作。整个过程包括读取一个包含两列的文件,其中一列的名称是我用来识别另一部分内容的。第二列是我想在这个.txt中标识的名称。到目前为止,我已经阅读了文件,请管理员将这两列分开并阅读。如果你下次发布尝试,你会得到更多帮助。我很想发布尝试,但这一次,我不知道从哪里开始,也不知道如何开始,因此我没有尝试。除非你想看到我以前写的所有代码,这些代码把我带到了名字列表中,我想总有一天会有人把所有的DNA片段放在一起,做成弗兰肯斯坦之类的东西!!:)我想用
strings3=[[line[I:I+3]表示xrange中的I(j,len(line),3)]表示xrange中的j(3)]
来扩展它。这只是将字符串分组到三个列表中,这样每个列表中的字符串可以连接起来以重新创建输入行。我想这就是他想要的字符串排序方式。我尝试了代码,但似乎不起作用。它还用q作为inf:AttributeError:exit,因为txt文件中有大约3000个这样的名称和它们的序列,我只想要列表中的50个,所以我认为这里的代码对我来说不起作用that@ivanhoifung当然,只有你才能决定是否合适,但我对这个错误感到困惑(甚至不确定它是什么,我的代码中没有
q
)。我在发布之前测试了代码。@Levon q是我代码中的.txt,经过一些修改,因此它没有我不想要的垃圾。但是,即使我尝试cDNA,这是我命名的打开(文件),出于某种原因,它仍然对我不起作用