2016-04-16 3 views
1

Ich habe eine Datei mit Informationen über Sequenzen. Jede Sequenz hat einige Zeilen. Die Sequenzen sind durch fünf weiße Linien getrennt. Ich möchte die Datei in eine Liste ändern und sie durch 5 Zeilenumbrüche teilen. Damit ich eine Liste habe, mit jeder Sequenz als ein Element. Dann möchte ich die Sequenzen entfernen, die den regulären Ausdruck nicht enthalten. Am Ende möchte ich eine Liste mit nur den Sequenzen, die die Regex enthalten.Wie überprüft man, ob ein Listenelement eine Regex in Python enthält?

Jetzt habe ich das. Kann mir jemand weiterhelfen?

import re 
def main(): 
    ReadFile() 
    file = open ("filename.txt", "r") 
    CreateList(file, data) 
    RegEx(file, data) 

def ReadFile() 
    try: 
     file = open ("filename.txt", "r") 
    except IOError: 
     print ("Can't open the file") 
    except: 
     print ("Something went wrong.") 

def CreateList(file, data) 
    data = file.readlines() 
    data = data.split('\n\n\n\n\n') 

def RegEx(file, data) 
    regex = ("[AG].{4}GK[ST]") 
    for element in data: 
     if regex not in element: 
      data.remove(element) 
    print (data) 

main() 

Datei wie folgt aussieht:

Hits for PS00017|ATP_GTP_A (pattern) ATP/GTP-binding site motif A (P-loop) : [occurs frequently] 
    Pattern: [AG]-x(4)-G-K-[ST] 
    Approximate number of expected random matches in ~ 100'000 sequences (50'000'000 residues): 3371 


>sp|Q6GZX2|003R_FRG3G (438 aa) 
Uncharacterized protein 3R. [Frog virus 3 (isolate Goorha) (FV-3)] 
MARPLLGKTSSVRRRLESLSACSIFFFLRKFCQKMASLVFLNSPVYQMSNILLTERRQVDRAMGGSDDDGVMVVALSPSD 
FKTVLGSALLAVERDMVHVVPKYLQTPGILHDMLVLLTPIFGEALSVDMSGATDVMVQQIATAGFVDVDPLHSSVSWKDN 
VSCPVALLAVSNAVRTMMGQPCQVTLIIDVGTQNILRDLVNLPVEMSGDLQVMAYTKDPLGKVPAVGVSVFDSGSVQKGD 
AHSVGAPDGLVSFHTHPVSSAVELNYHAGWPSNVDMSSLLTMKNLMHVVVAEEGLWTMARTLSMQRLTKVLTDAEKDVMR 
AAAFNLFLPLNELRVMGTKDSNNKSLKTYFEVFETFTIGALMKHSGVTPTAFVDRRWLDNTIYHMGFIPWGRDMRFVVEY 
DLDGTNPFLNTVPTLMSVKRKAKIQEMFDNMVSRMVTS 
     2 - 9:   ArpllGKT 


>sp|Q6GZX1|004R_FRG3G (60 aa) 
Uncharacterized protein 004R. [Frog virus 3 (isolate Goorha) (FV-3)] 
MNAKYDTDQGVGRMLFLGTIGLAVVVGGLMAYGYYYDGKTPSSGTSFHTASPSFSSRYRY 
     33 - 40:  GyyydGKT 


>sp|Q6GZW0|015R_FRG3G (322 aa) 
Uncharacterized protein 015R. [Frog virus 3 (isolate Goorha) (FV-3)] 
MEQVPIKEMRLSDLRPNNKSIDTDLGGTKLVVIGKPGSGKSTLIKALLDSKRHIIPCAVVISGSEEANGFYKGVVPDLFI 
YHQFSPSIIDRIHRRQVKAKAEMGSKKSWLLVVIDDCMDNAKMFNDKEVRALFKNGRHWNVLVVIANQYVMDLTPDLRSS 
VDGVFLFRENNVTYRDKTYANFASVVPKKLYPTVMETVCQNYRCMFIDNTKATDNWHDSVFWYKAPYSKSAVAPFGARSY 
WKYACSKTGEEMPAVFDNVKILGDLLLKELPEAGEALVTYGGKDGPSDNEDGPSDDEDGPSDDEEGLSKDGVSEYYQSDL 
DD 
     34 - 41:  GkpgsGKS', 


>sp|P32234|128UP_DROME (368 aa) 
GTP-binding protein 128up. [Drosophila melanogaster (Fruit fly)] 
MSTILEKISAIESEMARTQKNKATSAHLGLLKAKLAKLRRELISPKGGGGGTGEAGFEVAKTGDARVGFVGFPSVGKSTL 
LSNLAGVYSEVAAYEFTTLTTVPGCIKYKGAKIQLLDLPGIIEGAKDGKGRGRQVIAVARTCNLIFMVLDCLKPLGHKKL 
LEHELEGFGIRLNKKPPNIYYKRKDKGGINLNSMVPQSELDTDLVKTILSEYKIHNADITLRYDATSDDLIDVIEGNRIY 
IPCIYLLNKIDQISIEELDVIYKIPHCVPISAHHHWNFDDLLELMWEYLRLQRIYTKPKGQLPDYNSPVVLHNERTSIED 
FCNKLHRSIAKEFKYALVWGSSVKHQPQKVGIEHVLNDEDVVQIVKKV 
     71 - 78:  GfpsvGKS 

Daten sollten es sein (aber nur Proteine, die die RegEx enthält):

['>sp|Q6GZX2|003R_FRG3G (438 aa) 
Uncharacterized protein 3R. [Frog virus 3 (isolate Goorha) (FV-3)] 
MARPLLGKTSSVRRRLESLSACSIFFFLRKFCQKMASLVFLNSPVYQMSNILLTERRQVDRAMGGSDDDGVMVVALSPSD 
FKTVLGSALLAVERDMVHVVPKYLQTPGILHDMLVLLTPIFGEALSVDMSGATDVMVQQIATAGFVDVDPLHSSVSWKDN 
VSCPVALLAVSNAVRTMMGQPCQVTLIIDVGTQNILRDLVNLPVEMSGDLQVMAYTKDPLGKVPAVGVSVFDSGSVQKGD 
AHSVGAPDGLVSFHTHPVSSAVELNYHAGWPSNVDMSSLLTMKNLMHVVVAEEGLWTMARTLSMQRLTKVLTDAEKDVMR 
AAAFNLFLPLNELRVMGTKDSNNKSLKTYFEVFETFTIGALMKHSGVTPTAFVDRRWLDNTIYHMGFIPWGRDMRFVVEY 
DLDGTNPFLNTVPTLMSVKRKAKIQEMFDNMVSRMVTS 
     2 - 9:   ArpllGKT', 


'>sp|Q6GZX1|004R_FRG3G (60 aa) 
Uncharacterized protein 004R. [Frog virus 3 (isolate Goorha) (FV-3)] 
MNAKYDTDQGVGRMLFLGTIGLAVVVGGLMAYGYYYDGKTPSSGTSFHTASPSFSSRYRY 
     33 - 40:  GyyydGKT', 


'>sp|Q6GZW0|015R_FRG3G (322 aa) 
Uncharacterized protein 015R. [Frog virus 3 (isolate Goorha) (FV-3)] 
MEQVPIKEMRLSDLRPNNKSIDTDLGGTKLVVIGKPGSGKSTLIKALLDSKRHIIPCAVVISGSEEANGFYKGVVPDLFI 
YHQFSPSIIDRIHRRQVKAKAEMGSKKSWLLVVIDDCMDNAKMFNDKEVRALFKNGRHWNVLVVIANQYVMDLTPDLRSS 
VDGVFLFRENNVTYRDKTYANFASVVPKKLYPTVMETVCQNYRCMFIDNTKATDNWHDSVFWYKAPYSKSAVAPFGARSY 
WKYACSKTGEEMPAVFDNVKILGDLLLKELPEAGEALVTYGGKDGPSDNEDGPSDDEDGPSDDEEGLSKDGVSEYYQSDL 
DD 
     34 - 41:  GkpgsGKS', 


'>sp|P32234|128UP_DROME (368 aa) 
GTP-binding protein 128up. [Drosophila melanogaster (Fruit fly)] 
MSTILEKISAIESEMARTQKNKATSAHLGLLKAKLAKLRRELISPKGGGGGTGEAGFEVAKTGDARVGFVGFPSVGKSTL 
LSNLAGVYSEVAAYEFTTLTTVPGCIKYKGAKIQLLDLPGIIEGAKDGKGRGRQVIAVARTCNLIFMVLDCLKPLGHKKL 
LEHELEGFGIRLNKKPPNIYYKRKDKGGINLNSMVPQSELDTDLVKTILSEYKIHNADITLRYDATSDDLIDVIEGNRIY 
IPCIYLLNKIDQISIEELDVIYKIPHCVPISAHHHWNFDDLLELMWEYLRLQRIYTKPKGQLPDYNSPVVLHNERTSIED 
FCNKLHRSIAKEFKYALVWGSSVKHQPQKVGIEHVLNDEDVVQIVKKV 
     71 - 78:  GfpsvGKS'] 
+0

Können Sie nach, was die Datei aussieht und was Sie Ihr Endergebnis wollen wie – Keatinge

+0

nun aussehen zeigen, was Sie drucken (Daten) wollen aussehen wie – Keatinge

+0

Editiert auch, aber dann nur die Proteine, die RegEx enthalten. –

Antwort

0
import re 
file = open("ploop.txt") 
text = file.read() 
file.close() 

proteins = text.split("\n\n")[1:] 
proteinsMatching = [] 
toWrite = "" 

for protein in proteins: 
    if re.search(r"[AG].{4}GK[ST]", protein): 
     proteinsMatching.append(protein)   


for protein in proteinsMatching: 
    accensionCode = re.findall(r">sp\|(.{6})", protein)[0] 
    organism = re.findall(r"\n.+?\[(.+?)\]", protein)[0] 
    print(accensionCode, organism) 
    toWrite += accensionCode + " " + organism + "\n" 

f = open("results.txt", "w+") 
f.write(toWrite) 
f.close() 

# Q6GZX2 Frog virus 3 (isolate Goorha) (FV-3) 
# Q6GZX1 Frog virus 3 (isolate Goorha) (FV-3) 
# Q6GZW0 Frog virus 3 (isolate Goorha) (FV-3) 
# P32234 Drosophila melanogaster (Fruit fly) 

aktualisiert (wieder) für neue Anforderungen

Regex1 (Textdatei in Liste von p aufteilen roteins :) https://regex101.com/r/gU0gX5/1

Regex2 (Ihre regex zeigen, dass sie alle Spiel) https://regex101.com/r/nZ0pD6/1

+0

Danke für dieses Skript! Jetzt funktioniert der reguläre Ausdruck und ich bekomme die Proteine, die diesen RE enthalten. Aber danach muss ich etwas anderes mit allen Proteinen tun, die den RE enthalten, also sollte es in einer Liste sein. (Von jedem Protein, das diesen RE enthält, muss ich den Accession Code (6 Tokens nach dem> sp) und den Organismus (erste Info zwischen dem '()' in der zweiten Zeile) ausdrucken, also ist es auch mit deinem Script möglich mache eine Liste der Proteine ​​- das macht es einfacher für später –

+0

Ich repariere es, um das zu tun, was du willst, kannst du mir ein Beispiel dafür geben, wie der erste Akzessionscode aussehen sollte? Das erste Akzent-Token wäre: Q6GZX2 – Keatinge

+0

werfen Sie einen Blick, ich denke, das sollte Ihnen geben, was Sie suchen, solange das Format wird immer genau das gleiche sein – Keatinge

Verwandte Themen