【发布时间】:2015-10-17 02:38:21
【问题描述】:
我已经为此工作了一段时间,对此我感到非常沮丧。基本上,我有两个文本文档,它们都包含重要信息。第一个文档包含我要提取的一些信息(染色质名称、起点和终点),我想使用这些信息来搜索第二个文本中的信息(我想计算由起点和终点)。所以我试图提取起始序列号,然后使用它们对每个频率的 atcg 频率进行分块和计数。我觉得我已经接近了,但我最大的问题是如何使用从第一个文本中提取的起点和终点,并将它们用作第二个文本的起点和终点?
这是我目前所拥有的:
from __future__ import division
import nltk, re, pprint, subprocess
f = open('first_text.txt') #this text has chromatin name, start/end points
raw = f.read()
raw = read.lower ()
l = raw.splitlines() #these next few lines are just for formatting
l = [re.sub(r'\t', '', l) for l in l] #and getting rid of stuff I don't want
datas = []
for elem in l:
datas.append(elem.strip().split(' '))
wanted_stuff = []
for datas in datas:
wanted_stuff.append(datas[0:3]) #extracting chromatin name, start, end
# and making a list of [name, start, end]'s.
# for example: ['chr1', '10000', '106000'] is on one line, etc.
# next line is another ['chrx', 'start number', 'end number'], and so on
chroms = []
starts = []
ends = []
for wanted_stuff in wanted_stuff:
chroms.append(wanted_stuff[0])
starts.append(wanted_stuff[1])
ends.append(wanted_stuff[2])
start_stop = [slice(int(starts), int(stops)) for chroms, starts, stops in wanted_stuff]
print start_stop # ValueError: too many values to unpack
f.close()
f = open('dna.txt')
fdna = f.read()
fdna = fdna.lower()
format1 = re.sub(r'chr, '', fdna) #getting rid of stuff I don't want
my_format = re.sub(r'[^atcg]', '', format1)
# SOME KIND OF CHUNKING MAGIC HERE?!?!?!
total = len(my_format)
n_bits = my_format.count('n')
a_bits = my_format.count('a')
t_bits = my_format.count('t')
g_bits = my_format.count('g')
c_bits = my_format.count('c')
def percentage(count, total):
return 100 * count / total
f.close()
现在这只是打印一长串数字,计算每块 600 个字符中有多少个 a。但是,我想弄清楚如何通过我作为 first_text 的结果来定义这些块。 (即对于结果“chrom1, 10000, 10600”,在我的代码的第二部分中,我希望 10000 开始,10600 结束,然后遍历所有开始和结束,计算“a”在每个主干中。如果我可以返回类似“Chrom1, chunk 10000 - 10600 has 175 a's”的结果,我会很高兴!
谁能帮帮我?我不是一个很好的程序员......我知道我的一些代码是多余的。无论如何,非常感谢任何输入!
编辑以清除一些事情: 起点和终点的提取正在工作。如果我
print wanted_data
我的结果是
"['Chrom1', '10000', '10600'], ['Chrom1', '10600', '12300'], ['Chrom1', '12300', '17000'], ['Chrom1', '17000', '21000]', ...."
还有很多。每个数字中的第一个数字是起点(例如 10000)。第二个点是每个集合中的终点(例如10600)
编辑 - 起点和终点应该是块的起点和终点。所以我想使用 10000 和 106000 来查找 format2[10000:106000] 并计算这个块中的 a,然后对我得到的所有开始和结束执行此操作。
【问题讨论】:
-
起点和终点的提取工作正常吗?请提供提取数据的简要示例。
-
在循环中,
for datas in datas:每次迭代都会覆盖wanted_stuff- 它只会在迭代完成时包含最后一个item。 -
什么是“开始和结束”?字符偏移到第二个文件?线偏移?还有什么?您能否为我们提供一个您正在使用的数据的示例?
-
我在底部进行了编辑和澄清。同时,二战,如果我需要保留所有这些,我是否应该将结果附加到一个空列表中?
-
@wwii,感谢您注意到这一点。我将它附加到一个空列表中,并将为此编辑我的原始帖子。
标签: python generics text input chunking