我有一个包含这样数据的.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"
再次相同但跳过前两个字母
我真的不知道我该怎么做,特别是阅读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]
现在我有了一个想法,我想按步骤分解它们
1st:我想从我的.txt(名为q)列表中找出名称(我将其命名为e)
第二:我想让它读到下一行,直到它到达另一个名字(e)
第三:打破我读到的那些行,像这样#34; A"," T"," C"," G&#34 ;," A"," A"等
第四:读取3个字母是这样的 - " ATC"," GAA"
第五步:将它们写入文件,然后返回第4步,但这次是以第2个字母开头
第6步:基本上是第5步,但这次是在第3个字母上开始虽然我有这个想法,但我没有这方面的编程知识,有人可以帮助我
答案 0 :(得分: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
功能。