我的功能有问题,在8个地方切割一个字符串(DNA代码)并返回它们。我是rstrip()和split()函数的新手,我想我可能需要在这里使用它们,但我不太明白如何。
这是我的代码:
input2=open('queryfile.txt','r')
def slice_seq(a,b,c,d,e,f,g,h,query_seq):
query_seq=input2
slice_1=query_seq[a:b + 1]
slice_2=query_seq[c:d + 1]
slice_3=query_seq[e:f + 1]
slice_4=query_seq[g:h + 1]
return slice_1,slice_2,slice_3,slice_4
a=146
b=917
c=2381
d=2737
e=1
f=155
g=917
h=1057
answer=slice_seq(a,b,c,d,e,f,g,h,input2)
print(answer)
查询文件如下所示:
emb|AJ000012.1| Mycobacterium tuberculosis recA gene (strain Canetti)
CGAAAGGTCAGATCCGGGCCGGTGAGCACGCCGGATCCGGCCAGGCTAGCGGTGTTCAGCAGATCGTCGG
TGATCCGGACCAGCCGCGCACGCAAGTCGGGCCGCACCGCCGCCAGGGCGTTCGACGCGCCGACGAGCGC
GGACGCGATGTTGCCACACGCGGCGTGTCACACTTGAATCGAACAGGTGTTCGGCTACTGTGGTGATCAT
TCGGAGCAGCCGACTTGTCAGTGGCTGTCTCTAGTGTCACGGCCAACCGACCGATACCGGTCAATCGAAC
ACCGACCACAGGAGAGGCACCATGACGCAGACCCCCGATCGGGAAAAGGCGCTCGAGCTGGCAGTGGCCC
AGATCGAGAAGAGTTACGGCAAAGGTTCGGTGATGCGCCTCGGCGACGAGGCGCGTCAGCCGATTTCGGT
CATTCCGACCGGATCCATCGCACTCGACGTGGCCCTGGGCATTGGCGGCCTGCCGCGTGGCCGGGTGATA
GAGATATACGGCCCGGAATCTTCGGGTAAGACCACCGTGGCGCTGCACGCGGTGGCCAACGCTCAGGCCG
CCGGTGGTGTTGCGGCGTTCATCGACGCCGAGCACGCGCTGGATCCGGACTATGCCAAGAAGCTCGGTGT
CGACACCGATTCGCTGCTGGTCAGCCAGCCGGACACCGGGGAACAGGCACTCGAGATCGCCGACATGCTG
ATCCGCTCGGGTGCGCTTGACATCGTGGTGATCGACTCGGTGGCGGCGCTGGTGCCGCGCGCGGAGCTCG
AAGGCGAGATGGGCGACAGCCACGTCGGGCTGCAGGCCCGGCTGATGAGCCAGGCGCTGCGGAAAATGAC
CGGCGCGCTGAATAATTCGGGCACCACGGCGATCTTCATCAACCAGCTCCGCGACAAGATCGGAGTGATG
TTCGGGTCGCCCGAGACGACAACGGGCGGAAAGGCGTTGAAGTTCTACGCGTCGGTGCGCATGGACGTGC
GGCGGGTCGAGACGCTCAAGGACGGTACCAACGCGGTCGGCAACCGCACCCGGGTCAAGGTCGTCAAGAA
CAAGTGCCTCGCAGAGGGCACTCGGATCTTCGATCCGGTCACCGGTACAACGCATCGCATCGAGGATGTT
GTCGATGGGCGCAAGCCTATTCATGTCGTGGCTGCCGCCAAGGACGGAACGCTGCATGCGCGGCCCGTGG
TGTCCTGGTTCGACCAGGGAACGCAGGATGTGATCGGGTTGCGGATCGCCGGTGGCGCCATCGTGTGGGC
GACACCCGATCACAAGGTGCTGACAGAGTACGGCTGGCGTGCCGCCGGGGAACTCCGCAAGGGAGACCGG
GTGGCGCAACCGCGACGCTTCGACGGATTCGGTGACAGTGCGCCGATTCCGGCGGATCATGCCCGGCTGC
TTGGCTACCTGATCGGAGATGGCAGGGATGGTTGGGTGGGGGGCAAGACTCCGATCAACTTCATCAATGT
TCAGCGGGCGCTCATTGACGACGTGACGCGAATCGCTGCGACGCTCGGTTGTGCGGCCCATCCGCAGGGG
CGTATCTCACTCGCGATCGCTCATCGACCCGGTGAGCGCAACGGGGTACTGGACCTTTGTCGGCGGGCCG
GTGTGCACGGCAAGCTCGCGTGGGAGAAGACGATTCCGAATTGGTTCTTCGAGCCGGACATCGCGGCCGA
CATTGTCGGCAATCTGCTCTTCGGCCTGTTCGAAAGCGACGGGTGGGTGAGCCGGGAACAGACCGGGGCA
CTTCGGGTCGGTTACACGACGACCTCTGAACAACTCGCGCATCAGATTCATTGGCTGCTGCTGCGGTTCG
GTGTCGGGAGCACCGTTCGAGATTACGATCCGACCCAGAAGCGGCCGAGCATCGTCAACGGTCGACGGAT
CCAGAGCAAACGTCAAGTGTTCGAGGTCCGGATCTCGGGTATGGATAACGTCACGGCATTCGCGGAGTCA
GTTCCCATGTGGGGGCCGCGCGGTGCCGCGCTTATCCAGGCGATTCCAGAAGCCACGCAGGGGCGGCGTC
GTGGATCGCAAGCGACATATCTGGCTGCAGAGATGACCGATGCCGTGCTGAATTATCTGGACGAGCGCGG
CGTGACCGCGCAGGAGGCCGCGGCCATGATCGGTGTAGCTTCCGGGGACCCCCGCGGTGGAATGAAGCAG
GTCTTAGGTGCCAGCCGCCTTCGTCGGGATCGCGTGCAGGCGCTCGCGGATGCCCTGGATGACAAATTCC
TGCACGACATGCTGGCGGAAGAACTCCGGTATTCGGTGATCCGAGAAGTGCTGCCAACGCGGCGGGCACG
AACGTTCGACCTCGAGGTCGAGGAACTGCACACCCTCGTCGCCGAAGGGGTTGTCGTGCACAACTGTTCG
CCCCCCTTCAAGCAGGCCGAGTTCGACATCCTCTACGGCAAGGGAATCAGCAGGGAGGGCTCGCTGATCG
ACATGGGTGTGGATCAGGGCCTCATCCGCAAGTCGGGTGCCTGGTTCACCTACGAGGGCGAGCAGCTCGG
CCAGGGCAAGGAGAATGCCCGCAACTTCTTGGTGGAGAACGCCGACGTGGCTGACGAGATCGAGAAGAAG
ATCAAGGAAAAGCTTGGCATTGGTGCCGTGGTGACCGATGACCCCTCAAATGACGGTGTCCTGCCCGCCC
CCGTCGACTTCTGAGCGCGAAGAGCAGGCGCGGGCACTGTGCCTGCGCCTGCTCACCGCGCGATCCCGCA
CCCGCGC
任何帮助都会受到重视!我很确定我的问题是如何处理查询文件,以便函数可以识别并切片?
答案 0 :(得分:2)
我从问题中不清楚结果是4片还是8片。下面是尝试概括你的代码。此代码在列表列表中返回4个切片。第一切片来自a-> b,第二切片来自c-> d,第三切片来自e-> f,第四切片来自g-> h。
def slice_seq(slice_positions, filename):
with open(filename, 'r') as myfile:
data=myfile.read().replace('\n', '')
slice_out = [data[slice[0]:slice[1]+1] for slice in slice_positions]
return slice_out
slice_positions = [(146, 917), (2381, 2737), (1, 155), (917, 1057)]
filename = 'queryfile.txt'
slice_out = slice_seq(slice_positions, filename)
print(slice_out)
a-> b的切片是:
slice_out[0]
来自c-d的切片是:
slice_out[1]
等等。
答案 1 :(得分:1)
我认为你并不热衷于在该文件中切割标题,所以你必须首先以某种方式跳过它:
with open('queryfile.txt') as input2:
# Consume the header
next(input2) # or input2.readline()
然后该函数必须逐行读取文件到一个字符串,随后删除换行符:
dna = ''.join(row.strip() for row in query_seq)
我还建议你改变如何将切片索引传递给函数:
def slice_seq(query_seq, *slices):
这样你的函数接受0个或更多个切片作为位置参数,切片是索引的元组。总而言之,你得到:
def slice_seq(query_seq, *slices):
# feel free to use rstrip, if strip seems redundant
dna = ''.join(row.strip() for row in query_seq)
return [dna[a:b + 1] for a, b in slices]
a=146
b=917
c=2381
d=2737
e=1
f=155
g=917
h=1057
with open('queryfile.txt') as input2:
next(input2)
answer = slice_seq(input2, (a, b), (c, d), (e, f), (g, h))
print(*answer, sep='\n')