[Biopython] Updating feature Location in Seqfiles

Peter Cock p.j.a.cock at googlemail.com
Wed Nov 11 19:40:38 UTC 2020


Hello,

First what may be the simple answer: Looking at that code snippet, and
guessing that Seqfile is a SeqRecord object, both lists CompareBefore
and CompareAfter will be the same list. Thus you'd find no differences.

More generally, I would have recommend using slicing and addition of
SeqRecord chunks, which will reserve your features and shift their
coordinates accordingly - as long as each feature is fully within a chunk.
The tutorial covers this.

If you want to work more directly, you could try shifting a feature location
with an offset by adding (or subtracting an integer). (You could do
something
similar with the (private) _shift methods, but that is not intended for
direct use.)

However, it looks like you're taking what I would consider to be the hardest
option of rebuilding new location objects after all your sequence editing.
This is only reasonably straightforward if you have just simple locations
(like most bacterial features). Joins, origin wrapping, fuzzy locations etc
would need additional work.

Peter

On Wed, Nov 11, 2020 at 5:26 PM F.L. Ratzkowski <flr28 at cam.ac.uk> wrote:

> Hi,
> i am new here so I am sorry if I am doing anything wrong, feel free to
> tell me.
> I am farely new to biopython as well, currently i have written a script
> that reads in a .gbk file and then deletes and inserts different parts of
> the sequence. this would alter the absolute position of features. I have
> ultimately run a script that safes the new positions in 2 dataframes. When
> i now want to update all features with the Featurelocation command it seems
> to not work. I saved the features in a variable before and after me
> updating the features and was hoping to then detect a difference but it
> fails. here the basic part of the script i am struggling with
>
> CompareBefore = Seqfile.features
>
> for z in range(0, len(featureEndList)):
>     feature_end = int(ELdf.iloc[z][1])
>     feature_start = int(SLdf.iloc[z][1])
>     feature_strand = Seqfile.features[z].location.strand
>     Seqfile.features[z].location = FeatureLocation(feature_start,
> feature_end,strand=feature_strand)
>
> CompareAfter = Seqfile.features
>
> list = []
> for x in range(0,len(CompareAfter)):
>     if CompareBefore[x] != CompareAfter[x]:
>         list.append(x)
>
> I get 0 hits in this list.
> Please help 🙂 thank you
>
> _______________________________________________
> Biopython mailing list  -  Biopython at mailman.open-bio.org
> https://mailman.open-bio.org/mailman/listinfo/biopython
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.open-bio.org/pipermail/biopython/attachments/20201111/3cee4acc/attachment.htm>


More information about the Biopython mailing list