机智以文件结束
Wit's end with file to dict
Python:2.7.9
我擦掉了我所有的代码,因为我快疯了。
这是要点(这是给 Rosalind 的挑战):
我想要一个看起来像这样的文件(插入符号上没有引号)
">"Rosalind_0304
actgatcgtcgctgtactcg
actcgactacgtagctacgtacgctgcatagt
">"Rosalind_2480
gctatcggtactgcgctgctacgtg
ccccccgaagaatagatag
">"Rosalind_2452
cgtacgatctagc
aaattcgcctcgaactcg
等...
我想不通的是,到这里基本上什么都想不通了,脑子里乱七八糟的。我只会展示我在做什么,但没能做到。
第一。我想在文件中搜索“>”
然后将该行的其余部分作为键分配到字典中。
阅读下一行直到下一个'>'并做一些计算和return
对该键值的调查结果。
遍历文件并对每个字符串执行此操作。
然后比较所有值和 return 哪个值最高的键。
谁能帮忙?
如果我休息一下可能会有所帮助。我整天都在编码,我想我闻到了颜色。
def func(dna_str):
bla
return gcp #gc count percentage returned to the value in dict
my_function
某处returns那个百分比值:
with open('rosalind.txt', 'r') as ros:
rosa = {line[1:].split(' ')[0]:my_function(line.split(' ')[1].strip()) for line in ros if line.strip()}
top_key = max(rosa, key=rosa.get)
print(top_key, rosa.get(top_key))
对于文件中的每一行,这将首先检查在去除尾随白色后该行是否还剩下任何内容space,然后丢弃空白行。接下来,它将每个非空行作为条目添加到字典中,键是 space 左侧的所有内容,不需要的 >
除外,值是发送所有内容的结果在函数 space 的右侧。
然后它保存对应于最高值的键,然后打印该键及其对应的值。您剩下一本字典 rosa
,您可以随意处理它。
模块完整代码:
def my_function(dna):
return 100 * len(dna.replace('A','').replace('T',''))/len(dna)
with open('rosalind.txt', 'r') as ros:
with open('rosalind_clean.txt', 'w') as output:
for line in ros:
if line.startswith('>'):
output.write('\n'+line.strip())
elif line.strip():
output.write(line.strip())
with open('rosalind_clean.txt', 'r') as ros:
rosa = {line[1:].split(' ')[0]:my_function(line.split(' ')[1].strip()) for line in ros if line.strip()}
top_key = max(rosa, key=rosa.get)
print(top_key, rosa.get(top_key))
rosalind.txt
的完整内容:
>Rosalind_6404 CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCG
TTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG
>Rosalind_5959 CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCA
GGCGCTCCGCCGAAGGTCTATATCCA
TTTGTCAGCAGACACGC
>Rosalind_0808 CCACCCTCGTGGT
ATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGACTGGGAACCTGCGGGCAGTAGGTGGAAT
当 运行 模块时的结果:
Rosalind_0808 60.91954022988506
这应该可以正确处理不一定每行有一个条目的输入文件。
请参阅 SO 的格式化指南,了解如何制作内联或块代码标记以避开 ">"
之类的内容。如果您希望它显示为常规文本而不是代码,请使用反斜杠转义 >
:
类型:
\>Rosalind
结果:
>罗莎琳德
我想我现在已经把那部分记下来了。非常感谢。 BUUUUT。它会引发错误。
rosa = {line[1:].split(' ')[0]:calc(line.split(' ')[1].strip()) for line in ros if line.strip()}
IndexError: 列表索引超出范围
顺便说一句,这是我的功能。
def calc(dna_str):
for x in dna_str:
if x == 'G':
gc += 1
divc += 1
elif x == 'C':
gc += 1
divc += 1
else:
divc += 1
gcp = float(gc/divc)
return gcp
准确的测试文件。前后无空行。
>Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC
>Rosalind_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC公司
TGGGAACCTGCGGGCAGTAGGTGGAAT
Python:2.7.9 我擦掉了我所有的代码,因为我快疯了。 这是要点(这是给 Rosalind 的挑战):
我想要一个看起来像这样的文件(插入符号上没有引号)
">"Rosalind_0304
actgatcgtcgctgtactcg
actcgactacgtagctacgtacgctgcatagt
">"Rosalind_2480
gctatcggtactgcgctgctacgtg
ccccccgaagaatagatag
">"Rosalind_2452
cgtacgatctagc
aaattcgcctcgaactcg
等...
我想不通的是,到这里基本上什么都想不通了,脑子里乱七八糟的。我只会展示我在做什么,但没能做到。
第一。我想在文件中搜索“>” 然后将该行的其余部分作为键分配到字典中。 阅读下一行直到下一个'>'并做一些计算和return 对该键值的调查结果。 遍历文件并对每个字符串执行此操作。
然后比较所有值和 return 哪个值最高的键。 谁能帮忙? 如果我休息一下可能会有所帮助。我整天都在编码,我想我闻到了颜色。
def func(dna_str):
bla
return gcp #gc count percentage returned to the value in dict
my_function
某处returns那个百分比值:
with open('rosalind.txt', 'r') as ros:
rosa = {line[1:].split(' ')[0]:my_function(line.split(' ')[1].strip()) for line in ros if line.strip()}
top_key = max(rosa, key=rosa.get)
print(top_key, rosa.get(top_key))
对于文件中的每一行,这将首先检查在去除尾随白色后该行是否还剩下任何内容space,然后丢弃空白行。接下来,它将每个非空行作为条目添加到字典中,键是 space 左侧的所有内容,不需要的 >
除外,值是发送所有内容的结果在函数 space 的右侧。
然后它保存对应于最高值的键,然后打印该键及其对应的值。您剩下一本字典 rosa
,您可以随意处理它。
模块完整代码:
def my_function(dna):
return 100 * len(dna.replace('A','').replace('T',''))/len(dna)
with open('rosalind.txt', 'r') as ros:
with open('rosalind_clean.txt', 'w') as output:
for line in ros:
if line.startswith('>'):
output.write('\n'+line.strip())
elif line.strip():
output.write(line.strip())
with open('rosalind_clean.txt', 'r') as ros:
rosa = {line[1:].split(' ')[0]:my_function(line.split(' ')[1].strip()) for line in ros if line.strip()}
top_key = max(rosa, key=rosa.get)
print(top_key, rosa.get(top_key))
rosalind.txt
的完整内容:
>Rosalind_6404 CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCG
TTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG
>Rosalind_5959 CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCA
GGCGCTCCGCCGAAGGTCTATATCCA
TTTGTCAGCAGACACGC
>Rosalind_0808 CCACCCTCGTGGT
ATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGACTGGGAACCTGCGGGCAGTAGGTGGAAT
当 运行 模块时的结果:
Rosalind_0808 60.91954022988506
这应该可以正确处理不一定每行有一个条目的输入文件。
请参阅 SO 的格式化指南,了解如何制作内联或块代码标记以避开 ">"
之类的内容。如果您希望它显示为常规文本而不是代码,请使用反斜杠转义 >
:
类型:
\>Rosalind
结果:
>罗莎琳德
我想我现在已经把那部分记下来了。非常感谢。 BUUUUT。它会引发错误。
rosa = {line[1:].split(' ')[0]:calc(line.split(' ')[1].strip()) for line in ros if line.strip()}
IndexError: 列表索引超出范围
顺便说一句,这是我的功能。
def calc(dna_str):
for x in dna_str:
if x == 'G':
gc += 1
divc += 1
elif x == 'C':
gc += 1
divc += 1
else:
divc += 1
gcp = float(gc/divc)
return gcp
准确的测试文件。前后无空行。
>Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC
>Rosalind_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC公司
TGGGAACCTGCGGGCAGTAGGTGGAAT