切割一根线并返回拼接的线

2024-03-28 12:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

在函数中将字符串(DNA代码)分成8个位置并返回它们时遇到问题。我对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

任何帮助都将不胜感激!我很确定我的问题是如何处理查询文件,以便函数能够识别它并对它进行切片?你知道吗


Tags: 文件函数字符串代码answer密码sliceopen
3条回答

我想你不太喜欢在那个文件中切片头,所以你必须先跳过它,不管怎样:

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')

从这个问题上我不清楚结果应该是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]

以此类推。你知道吗

在函数slice_seq中,删除行query_sec = input2。这是一个错误。您还没有在函数中创建名为input2的变量,也没有命名为so的参数。这是一个错误。不能将函数中的变量设置为另一个变量。你必须先全局化另一个变量。你知道吗

相关问题 更多 >