Szeretnék létrehozni egy adatbázist egy proteomikai tanulmányhoz. Ezért az adott szekvenciáról a protein ID-re való leképezésnek egyedinek kell lennie. Kíváncsi vagyok, van-e már beépített funkció a Biopythonban ehhez, de nem találtam ilyet. A duplikált szekvenciák kellene összevonni egyetlen belépési és ott saját ID kell csak összefűzve (lásd a várt eredményt alább).
A következő példa bemenet
>prot_id_1MAWIGLDISKLFVENSRDAAA>prot_id_2MENVSRIWRYQQRRVLSRAFTHWYLMGLTKHNHPS>prot_id_3MRTRPSRDFHYIVGRITRESPEEKGIFYVFH>prot_id_4MEMVLSSANPSTTFADSYVV>prot_id_5MAWIGLDISKLFVENSRDAAA>prot_id_6MENVSRIWRYQQRRVLSRAFTHWYLMGLTKHNHPS>prot_id_7MAWIGLDISKLFVENSRDAAA kód>
Jelenleg a következőképpen csinálom:
a Bio fájlból importálja a SeqIOimport számot, mint npfrom a Bio fájlból. A Seq importálja a Bio.SeqRecord fájlt a Bio.SeqRecord fájlból a Bio.Alphabet importból IUPAC # Read bejegyzések a szótárba, gi: sequencerecord_dict = SeqIO.to_dict (SeqIO.parse ("test.fasta", "fasta")) # Sorozat kibontása stringrecord_dict = {gi: str (record_dict [gi] .seq) gi számára a record_dict} # Ellenőrizze a duplikált sequencesseq_id_dict = {} k, v értékét a record_dict.items () fájlban: seq_id_dict.setdefault (v, []). addend (k) # Egyszer többször megjelenő szűrőszekvenciákfilter_dict = {seqi: li for seqi, li a seq_id_dict.items () if len (li) > 1} # Azonosítók egyesítése a single onemerged_ids = {"_". join (sorted (li)): seqi for seqi, li in filter_dict.items ()} # Távolítsa el az összes bejegyzést, amely a gi duplikált azonosítóihoz van társítva )):: record_dict.pop (gi, None) # Az összevont azonosítók felvétele ismétrecord_dict.update (merged_ids) # Lista létrehozása a Seq Objectsfinal_seq = [SeqRecord (Seq (seqi, IUPAC.protein), id = gi, name = '' , description = '') a gi-hez, seqi a record_dict.items ()] fájlban kívánt kimenet:
>prot_id_4MEMVLSSANPSTTFADSYVV>prot_id_1_prot_id_5_prot_id_7MAWIGLDISKLFVENSRDAAA>prot_id_3MRTRPSRDFHYIVGRITRESPEEKGIFYVFH>prot_id_2_prot_id_6MENVSRIWRYQQRRVLSRAFTHWYLMGLTKHNHPS
Van egy intelligensebb módon ennek megvalósítására?