This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Double Digest through Regular Expression in python

I have the following DNA sequence in dna.txt file :

ATGGCAATAACCCCCCGTTTCTACTTCTAGAGGAGAAAAGTATTGACATGAGCGCTCCCGGCACAAGGGCCAAAGAAGTCTCCAATTTCTTATTTCCGAATGACATGCGTCTCCTTGCGGGTAAATCACCGACCGCAATTCATAGAAGCCTGGGGGAACAGATAGGTCTAATTAGCTTAAGAGAGTAAATCCTGGGATCATTCAGTAGTAACCATAAACTTACGCTGGGGCTTCTTCGGCGGATTTTTACAGTTACCAACCAGGAGATTTGAAGTAAATCAGTTGAGGATTTAGCCGCGCTATCCGGTAATCTCCAAATTAAAACATACCGTTCCATGAAGGCTAGAATTACTTACCGGCCTTTTCCATGCCTGCGCTATACCCCCCCACTCTCCCGCTTATCCGTCCGAGCGGAGGCAGTGCGATCCTCCGTTAAGATATTCTTACGTGTGACGTAGCTATGTATTTTGCAGAGCTGGCGAACGCGTTGAACACTTCACAGATGGTAGGGATTCGGGTAAAGGGCGTATAATTGGGGACTAACATAGGCGTAGACTACGATGGCGCCAACTCAATCGCAGCTCGAGCGCCCTGAATAACGTACTCATCTCAACTCATTCTCGGCAATCTACCGAGCGACTCGATTATCAACGGCTGTCTAGCAGTTCTAATCTTTTGCCAGCATCGTAATAGCCTCCAAGAGATTGATGATAGCTATCGGCACAGAACTGAGACGGCGCCGATGGATAGCGGACTTTCGGTCAACCACAATTCCCCACGGGACAGGTCCTGCGGTGCGCATCACTCTGAATGTACAAGCAACCCAAGTGGGCCGAGCCTGGACTCAGCTGGTTCCTGCGTGAGCTCGAGACTCGGGATGACAGCTCTTTAAACATAGAGCGGGGGCGTCGAACGGTCGAGAAAGTCATAGTACCTCGGGTACCAACTTACTCAGGTTATTGCTTGAAGCTGTACTATTTTAGGGGGGGAGCGCTGAAGGTCTCTTCTTCTCATGACTGAACTCGCGAGGGTCGTGAAGTCGGTTCCTTCAATGGTTAAAAAACAAAGGCTTACTGTGCGCAGAGGAACGCCCATCTAGCGGCTGGCGTCTTGAATGCTCGGTCCCCTTTGTCATTCCGGATTAATCCATTTCCCTCATTCACGAGCTTGCGAAGTCTACATTGGTATATGAATGCGACCTAGAAGAGGGCGCTTAAAATTGGCAGTGGTTGATGCTCTAAACTCCATTTGGTTTACTCGTGCATCACCGCGATAGGCTGACAAAGGTTTAACATTGAATAGCAAGGCACTTCCGGTCTCAATGAACGGCCGGGAAAGGTACGCGCGCGGTATGGGAGGATCAAGGGGCCAATAGAGAGGCTCCTCTCTCACTCGCTAGGAGGCAAATGTAAAACAATGGTTACTGCATCGATACATAAAACATGTCCATCGGTTGCCCAAAGTGTTAAGTGTCTATCACCCCTAGGGCCGTTTCCCGCATATAAACGCCAGGTTGTATCCGCATTTGATGCTACCGTGGATGAGTCTGCGTCGAGCGCGCCGCACGAATGTTGCAATGTATTGCATGAGTAGGGTTGACTAAGAGCCGTTAGATGCGTCGCTGTACTAATAGTTGTCGACAGACCGTCGAGATTAGAAAATGGTACCAGCATTTTCGGAGGTTCTCTAACTAGTATGGATTGCGGTGTCTTCACTGTGCTGCGGCTACCCATCGCCTGAAATCCAGCTGGTGTCAAGCCATCCCCTCTCCGGGACGCCGCATGTAGTGAAACATATACGTTGCACGGGTTCACCGCGGTCCGTTCTGAGTCGACCAAGGACACAATCGAGCTCCGATCCGTACCCTCGACAAACTTGTACCCGACCCCCGGAGCTTGCCAGCTCCTCGGGTATCATGGAGCCTGTGGTTCATCGCGTCCGATATCAAACTTCGTCATGATAAAGTCCCCCCCTCGGGAGTACCAGAGAAGATGACTACTGAGTTGTGCGAT

I want to read the DNA sequence from the file dna.txt and then predict the lengths of the fragments that we will get by digesting the sequence with the (made-up) restriction enzymes

  • AbcI: cutting site "ANT*AAT"
  • AbcII: cutting site "GCRW*TG"

asterisks indicate where the enzyme cuts the DNA

Can anyone solve my query?

regex resriction-enzyme python

Did you try anything? Biostars is generally not a code-writing service.

import re

# open input file
infile = open("dna.txt")
line = infile.read()
# split line by "," into list of strings
sequence = line.strip().split(",")

print(sequence)

after that, I am unable to do?

It is something diffrent

Like the other user said, those answers should be useful, not applicable as-is. Try adapting them and come back to us if you have difficulties.

2 answers

Here's something to get you started:

import re
def digdigest(digseq, cutsite_orig):
  cutsite_l, cutsite_r = re.split("\*", cutsite_orig)

  #Identify cutting positions with a unique character
  cutsite = re.sub("\*", "", cutsite_orig)
  cutsite

  #If there are Ns in the cutsite, replace this with the . regex placeholder
  cutsite = re.sub("N", ".", cutsite)
  cutsite_l = re.sub("N", ".", cutsite_l)
  cutsite_r = re.sub("N", ".", cutsite_r)

  #cutsite_l+"__"+cutsite_r
  digseq_mod = re.sub(r"("+cutsite_l+")"+"("+cutsite_r+")", r"\1__\2", digseq)



  print(digseq_mod.split("__"))
  #return(digseq_mod.split("__"))

Provide digdigest() the sequence and cutting site as you have indicated in the OP, and you'll get something like this:

digdigest("ATATATATAGTAATGTGTGCATTAATATGC", "ANT*AAT")
#['ATATATATAGT', 'AATGTGTGCATT', 'AATATGC']

i have tried this script:

import re
dna = open("dna.txt").read().strip("\n")
#print(str(len(dna)))
all_cuts = [0]

# finda and append different cut positions for AbcI
for match in re.finditer(r"A[ATGC]TAAT", dna):#begins with A followed by any one character [ATGC]and then TAAT
    all_cuts.append(match.start() + 3) #ANT*AAT, finding position is A therefore +3 for ANT
print(all_cuts)

# add cut positions for AbcII
for match in re.finditer(r"GC[AG][AT]TG", dna):
    all_cuts.append(match.start() + 4) # GCRW*TG the finding position is G therefore +4 for GCRW, 
print(all_cuts)

# add the finalend position i.e. length of dna
all_cuts.append(len(dna))
sorted_cuts = sorted(all_cuts)# Sort the cut position in ascending order so that we get length of each fragements correct
print(sorted_cuts)
for i in range(1,len(sorted_cuts)):
    this_cut_position = sorted_cuts[i]
    previous_cut_position = sorted_cuts[i-1]
    fragment_size = this_cut_position - previous_cut_position
    print("one fragment size is " + str(fragment_size))

And it gives me the following output :

[0, 1143, 1628]
[0, 1143, 1628, 488, 1577]
[0, 488, 1143, 1577, 1628, 2012]
one fragment size is 488
one fragment size is 655
one fragment size is 434
one fragment size is 51
one fragment size is 384

Log in to answer this question.