2016-10-13 6 views
0

Ich versuche, vordefinierte Sequenz aus Pdb-Eingabedatei in Python zu drucken, aber ich bekomme kein erwartetes Ergebnis. Ich bin neu in Python, und ich habe auch Verzeichnis importieren, aber es funktioniert nicht. zeigt nichts an (Fehler kann nicht gefunden werden). Es läuft nur ohne Ausgabe.So drucken Sie vordefinierte Sequenz in Python

import os 

os.chdir('C:\Users\Vishnu\Desktop\Test_folder\Input') 


for path, dirs, pdbfile in os.walk('/C:\Users\Vishnu\Desktop\Test_folder\Input'): 
for line in pdbfile: 
    if line[:6] != "HETATM": 
     continue 
    chainID = line[21:22] 
    atomID = line[13:16].strip() 
    if chainID not in ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'): 
     continue 
    if atomID not in ('C4B', 'O4B', 'C1B', 'C2B', 'C3B'): 
     continue 
    with open('C:\Users\Vishnu\Desktop\Test_folder\Input', 'r') as fh: 
     new = [line.rstrip() for line in fh] 
    with open('C:\Users\Vishnu\Desktop\Test_folder\Output', 'w') as fh: 
     [fh.write('%s\n' % line) for line in new] 
     fh.write((line.rstrip())) 

Erwartete Ausgabe:

HETATM 3788 C4B NAI A 302  52.695 15.486 8.535 1.00 57.28   C 
HETATM 3789 O4B NAI A 302  52.258 14.631 7.456 1.00 56.26   O 
HETATM 3794 C1B NAI A 302  53.348 13.816 7.022 1.00 53.44   C 
HETATM 3792 C2B NAI A 302  54.537 14.748 7.190 1.00 50.93   C 

HETATM 3789 O4B NAI A 302  52.258 14.631 7.456 1.00 56.26   O 
HETATM 3794 C1B NAI A 302  53.348 13.816 7.022 1.00 53.44   C 
HETATM 3792 C2B NAI A 302  54.537 14.748 7.190 1.00 50.93   C 
HETATM 3790 C3B NAI A 302  54.225 15.525 8.465 1.00 52.99   C 

HETATM 3794 C1B NAI A 302  53.348 13.816 7.022 1.00 53.44   C 
HETATM 3792 C2B NAI A 302  54.537 14.748 7.190 1.00 50.93   C 
HETATM 3790 C3B NAI A 302  54.225 15.525 8.465 1.00 52.99   C 
HETATM 3788 C4B NAI A 302  52.695 15.486 8.535 1.00 57.28   C 
HETATM 3792 C2B NAI A 302  54.537 14.748 7.190 1.00 50.93   C 
HETATM 3790 C3B NAI A 302  54.225 15.525 8.465 1.00 52.99   C 
HETATM 3788 C4B NAI A 302  52.695 15.486 8.535 1.00 57.28   C 
HETATM 3789 O4B NAI A 302  52.258 14.631 7.456 1.00 56.26   O 

HETATM 3790 C3B NAI A 302  54.225 15.525 8.465 1.00 52.99   C 
HETATM 3788 C4B NAI A 302  52.695 15.486 8.535 1.00 57.28   C 
HETATM 3789 O4B NAI A 302  52.258 14.631 7.456 1.00 56.26   O 
HETATM 3794 C1B NAI A 302  53.348 13.816 7.022 1.00 53.44   C 

gleiches Format auch für B-Kette.

Wie vordefinierte Sequenz drucken? Linie [21:22] ist dort Ketten-ID, Ketten-ID kann A bis H sein. Wie definiert man A bis H Ketten-ID?

Ich bin nicht in der Lage, hintereinander zu drucken, kann mir jemand wissen, wie man vordefinierte Sequenz in Python drucken?

Nach Antwort:

ich oben Code mit folgendem Code aktualisiert:

n = 4 
for chain, atoms in d.items(): 
    for atom, line in atoms.items(): 
     for i in range(len(atom)-n+1): 
      for j in range(n): 
       print d[chain][atomIDs[i+j]] 
      print 

Ich mag zwei weiteren Absatz verlängern, aber nicht ausgegeben

+1

Hallo Vish. Sie können 'line = line.rstrip()' hinter 'for line in pdbfile:' ausführen, oder Sie können 'print (line, end = '')' ausführen, um zu vermeiden, dass zwei Zeilenwechselzeichen gedruckt werden. –

+0

Nach 'für Zeile in pdbfile 'würde ich' chain = line [21:22] 'machen. Ansonsten sind "21" und "22" durchweg magische Zahlen. Und danach würde ich 'wenn Chain-in ('A', 'B', ...)' anstelle von mehreren 'if-Zeile [21:22] ==" A/B/... "tun:' –

+0

I würde 'atomID = line [12:16] .strip()' machen und tun, wenn atomID in ('C4B', 'O4B', ...): 'anstatt mehrere if-Anweisungen zu haben. –

Antwort

1
erwartete immer

Hier sind meine Kommentare All zu einer Antwort kombiniert:

with open('1AHI.pdb') as pdbfile: 
    for line in pdbfile: 
     if line[:6] != "HETATM": 
      continue 
     chainID = line[21:22] 
     atomID = line[13:16].strip() 
     if chainID not in ('A', 'B'): 
      continue 
     if atomID not in ('C4B', 'O4B', 'C1B', 'C2B', 'C3B'): 
      continue 
     ## Either: 
     print(line, end='') 
     ## Or: 
     print(line.rstrip(), end='\n') 
     ## Or if Python2.x: 
     print line.rstrip() 

Meine ersten Codezeilen wurden vor mehr als 10 Jahren geschrieben, als PDB-Dateien analysiert wurden. Verzweifle nicht. Du hast eine lange und schöne Reise vor dir.

P.S. Ich denke, dass mmCIF heute über PDB bevorzugen wird ... Stellen Sie sicher, dass Sie die Spezifikationen für beide Dateiformate lesen.


Ich habe die Antwort aktualisiert, aber bitte beachten Sie diese Seite für die Lösung spezifischer Probleme und nicht für andere Leute die Arbeit für Sie tun. Es wird allgemein herabgesehen.

d = {} 
chainIDs = ('A', 'B',) 
atomIDs = ('C4B', 'O4B', 'C1B', 'C2B', 'C3B', 'C4B') 
with open('1AHI.pdb') as pdbfile: 
    for line in map(str.rstrip, pdbfile): 
     if line[:6] != "HETATM": 
      continue 
     chainID = line[21:22] 
     atomID = line[13:16].strip() 
     if chainID not in chainIDs: 
      continue 
     if atomID not in atomIDs: 
      continue 
     try: 
      d[chainID][atomID] = line 
     except KeyError: 
      d[chainID] = {atomID: line} 

n = 4 
for chainID in chainIDs: 
    for i in range(len(atomIDs)-n+1): 
     for j in range(n): 
      print d[chainID][atomIDs[i+j]] 
     print 
+0

Dank, aber ich Fehler bekommen: Die Datei "C: /Users/Desktop/test_python.py", Zeile 11 Druck (Linie, Ende = '') ^ Syntax: ungültige Syntax >>> – Vish

+0

Try 'Druckzeile. rstrip() 'if Python2.x. Wenn Sie gerade anfangen, Python zu lernen, dann ermutige ich Sie * dringend *, Python3 anstelle von Python2 zu lernen. Python3 ist Gegenwart und Zukunft. Python2 ist nicht. –

+0

Vielen Dank für Ihre Anleitung und Hilfe, ich habe meine obige Frage bearbeiten können Sie bitte überprüfen? und bitte führen Sie mich – Vish

Verwandte Themen