ZMBP - Computer- Bioinformatik - Python - Einführung Wissenschaftlich Arbeiten mit Computer und Internet Kursübersicht Im Skript suchen Bioinformatik Bioinformatik Python Tag 1 1. Einführung 2. Strings 3. Dateien Tag 2 4. Listen,Schleifen 5. Funktionen Tag 3 6. Verzweigung 7. Reg.Exp. Tag 4 8. Dictionaries 9. System/Input Python für Biologen - In 4 Tagen Nach einer Idee und mit Beispielen von Dr. Martin Jones http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists Einstiegsbeispiel, zum Beispiel Zeile 1 und Spalte 12 Die Daten wurden von einem Plattenleser generiert. Nächster Kurs 16.2.16 - 19.2.16 10 - 16:00 Raum 168, Morgenstelle 3 max. 12 Teilnehmer Anmeldung unter Campus Uni-Tuebingen Index Impressum Tag 1 - Einführung Müssen Biologen programmieren lernen? Nein! Programmieren gehört nicht in die Grundausbildung von Biologen. Aber in manchen Bereichen hilft Programmieren ungemein. Das Verständnis für Bioinformatik steigt. In vielen Bereichen der Biologie werden Daten ermittelt und ausgewertet. Spezialisierte Programme kostenlos oder von Firmen helfen dabei (Übersicht Programme Molekularbiologie). Oft wird ein "Bioinformatiker" um Rat gefragt. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung Wenn die Grundlagen für Programmieren erlernt wurden, steigt das Verständnis um die Probleme zu bewältigen. Viele Programme sind ähnlich strukturiert, kennt man sich in einer Programmiersprache aus, kann leicht eine andere erlernt werden. Kleine Programme können selbst geschrieben werden. Mit kostenlosen Programmen, wie Python und Perl, können einfache Lösungen zu schwierigen Problemen gefunden werden. Programmieren macht Spaß und ist ein kreativer Prozess Statt Software am Computer zu konsumieren, kann nach eigenen Bedürfnissen ein Programm angelegt werden. Das ist ein kreativer Prozess. Die Arbeit macht Spaß. Die besten Programmierer der Galaxis, C-3PO und R2-D2 - Russavia, Wikimedia Common Einsteigerprogrammiersprachen für Biologen Es gibt eine Vielzahl von Programmiersprachen Liste der Programmiersprachen Welche Programmiersprachen kommen für Biologen in Frage? Excel Funktionen Kurs Excel Excel Makros und VBA Kurs Excel Skriptsprachen Python und Perl Dieser Kurs und Kurse ZDV R für Statistik, Microarrays, Bildauswertung Mikroskopie - Imaging Bilton, Mark: Introduction to "R" PHP, Webprogrammierung Kurse ZDV http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung Java, Einsatz auf verschiedenen Plattformen (Windows, MacOSX, Linux) möglich Kurse ZDV Die anderen höheren Programmiersprachen wie C++ usw. werden von Biologen selten gelernt und eingesetzt. Kurse ZDV Warum Python? Die Aminosäuresequenzen der Proteine und die Basensequenzen der DNA sind ausgezeichnete Ziele um Abläufe zu programmieren. Die Skriptsprache Perl wird und wurde dafür stark eingesetzt. Perl hat eine klare Struktur, lässt aber zu, dass schnell unverständlicher Code produziert wird (mangelnde Lesbarkeit) (Wikipedia). Perl lässt viele Freiheiten zu und ist daher weniger konsistent. Daher hat sich vor allem für Anfänger eher Python etabliert (Wikipedia). "Python ist die verbreitetste Einsteiger-Programmiersprache an US-Top-Universitäten", Heise Online 8.7.14 Wer Python lernt, kann aber auch schnell zu Perl wechseln und umgekehrt. Beide Skriptsprachen sind gleich mächtig. Perl bietet in der Biologie mehr Beispiele, aber Python holt auf. Für Python gibt es auf der ganzen Welt biologische Anwendungen, Dokumentationen und Tutorials Für Python gibt es spezielle Module und Bibliotheken, die in der Biologie eingsetzt werden Die bekanntesten Pakete sind Biopython und PythonXY. Immer mehr Programme können mit Python programmiert werden. Beispiele sind Plugins für GIMP (GIMPPython) und ImageJ oder das Animationsprogramm Blender (Wikipedia). Entwickelt wurde Python Anfang der 1990er Jahre von Guido van Rossum, Centrum Wiskunde & Informatica in Amsterdam. Der Name geht auf Monty Python zurück. Monty Python - Silly Walk - nach Wegmann Wikimedia Common http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung Kennzeichen von Python Einfach und übersichtlich Python ist einfach und übersichtlich durch möglichst wenige Schlüsselwörter und besticht mit einer übersichtlicher Syntax. Python wird als Skriptsprache eingesetzt. Die Textdatei wird als Code direkt zur Ausführung gebracht. Variablen müssen nicht deklariert werden. Arbeitet mit Funktionen Immer wiederkehrende Codeabschnitte werden in Funktionen festgehalten. Dadurch werden Arbeitsabläufe einfacher. Objektorientierte Programmierung möglich Python ist wie die "höheren" Programmiersprachen (C, C++) auch eine komplexe Programmiersprache. In diesem Kurs wird objektorientierte Programmierung nicht behandelt. Offenes, gemeinschaftsbasiertes Entwicklungsmodell (Python Software Foundation) Auf der ganzen Erde arbeiten Entwickler kostenlos an der Fortführung von Python. Diese Arbeit ist gut organisiert. Dadurch bleibt Python immer auf dem neuesten Stand. Sicherheitslücken und Fehler werden schnell beseitigt. Große Standardbibliothek, plattformunabhängig Die erstellten Programme laufen in UNIX, MacOS und Windows gleichermaßen. Einbinden weiterer Module möglich. Für Python gibt es spezielle Erweiterungen. Diese werden zu sogenannten Modulen zusammengefasst. Nur benötigte Module werden in das Programm eingebunden. Entwicklungsumgebungen vorhanden Entwicklungsumgebungen (IDE) für Python erleichtern das Programmieren. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung Python ist kinderleicht - Foto Albert Herring Wikimedia Commons Wie wird Python ausgeführt? Python muss auf Windows Rechnern installiert werden. Bei den meisten Linux Distributionen (Debian, OpenSuse, Ubuntu,...) ist Python bereits installiert. Auch auf Apple Mac Rechnern ist Python vorinstalliert. Download Python Python kann von folgender Seite heruntergeladen werden. https://www.python.org/ Im Kurs wird ein Python Paket eingesetzt, das zusammen mit vielen für Biologen brauchbaren Modulen installiert wird. PythonX,Y (Download) Dieses Python-Paket ist zum Beispiel mit den Modulen ausgestattet um Diagramme zu erstellen. Außerdem wird die Entwicklungsumgebung Spyder installiert. Großer Nachteil ist, dass das Paket und einige Module noch nicht für Python 3 vorbereitet sind (s.u.) Python Konsole Python kann in einer interaktiven Konsole ("Eingabeaufforderung" unter Windows) ausgeführt werden. Dazu im Terminal (Linux oder MacOSX) oder Eingabeaufforderung (Windows) python eingeben. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung Konsole Beispiel in Windows Windows-Taste + r "cmd" eintippen "python" Python in der interaktiven Konsole ausführen - hier Windows 7 Es meldet sich Python mit der installierten Version. Anschließend wird der Prompt >>> gezeigt. Diese interaktive Python Konsole wird mit exit() verlassen. Die interaktive Konsole ist nur für kleine Programme geeignet. IPython Dokumentation Interaktive Konsole mit noch mehr Funktionen IPython kann in der Konsole mit dem Befehl "ipython" aufgerufen werden. Zur Installation werden am besten die Pakete Anaconda oder Python xy eingesetzt. Installation und für weitere Informationen: http://ipython.org/index.html In der Entwicklungsumgebung (IDE) Spyder gibt es für iPhyton ein eigenes Fenster. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung IPython in der Konsole ausgeführt Welche Vorteile hat IPython im Vegleich zur Konsole? - Ausgabe: Die Ausgabe ist lesbarer, z.B. bei Dictionaries. - Tab Completion: Mit der Taste Tab kann nach einer bekannten Variablen, Methoden mit den entsprechenden Anfangsbuchstaben gesucht werden. Ähnliches funktioniert auch mit Dateipfaden. Wenn irgendwas wie der Anfang eines Dateipfad eingegeben wird (enthält "/" bei Linux und Mac), wird eine Liste der passenden Dateinamen ausgegeben. - Introspection: Fragezeichen nach einer Variablen oder Funktion gibt Informationen aus. Es kann auch mit Wildcard * gearbeitet werden. - %run: Ein Python-Code in einer Datei kann innerhalb von IPython mit %run ausgeführt werden. Beispiel, mit "%run test.py" wird die Datei test.py ausgeführt. Ein beliebiger Konsolenbefehl wird mit ein vorangestellten "!" ausgeführt. Beispiel !ping 134.2.200.1 - Strg + Shift + V: Code kann mit Strg + Shift + V eingefügt werden. Siehe auch die magic functions %paste und %cpaste. - Tastaturkürzel: Es sind viel spezielle Tastenkürzel wirksam. Am einfachsten wird das mit "%quickref " und "h" für Hilfe aufgelistet. - magic commands: Mit vorangestelltem "%" und "%%" können spezielle IPython-Befehle, die magic commands ausgeführt werde. Hier eine Übersicht Mehr Informationen über einen Befehl kann mit "?" am Ende des Befehls erhalten werden. - GUI Console: mit ipython qtconsole --pylab=inline kann eine eigene grafische Oberfläche aufgemacht werden. - Suche in der Command History: Mit Strg + P (oder Pfeil nach unten), Strg + N (oder Pfeil nach oben) und Strg + R (reverse Suche) kann in bereits eingegbener Code erneut ausgeführt werden oder darin gesucht werden. - Session aufzeichnen: mit %logstart, logstop und %logoff sowie %logstate kann die Eingabe und die Ausgabe aufgezeichnet werden. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung IPython Notebook Ein geniale Methode um mit IPython zu arbeiten ist IPython Notebook http://ipython.org/notebook.html Standard Tastaturkürzel Mac Tastenkürzel http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung I Python Notebook - Text und Code. Nachdem IPython installiert ist, am besten mit dem Paket Anaconda oder Python(x,y), wird das Programm in der Konsole mit ipython notebook aufgerufen. Im Standard-Browser öffnet sich ein Fenster, in dem die Ordner und Dateien auf dem lokalen PC gezeigt werden. Ausgangspunkt für Ordner vorher mit cd in der Konsole bestimmen. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung Ein neues "Notebook" kann angelegt werden. Es ist in "Cells" gegliedert, die einzeln ausgeführt werden können (Umschalten + Enter) Das "Notebook" wird mit der Dateiendung ipynb gespeichert Der Clou ist das die Sitzung gespeichert wird und später wieder ausgeführt werden kann. IPython Notebook ist sehr gut geeignet, um die Beispiele im Kurs nachzuvollziehen. Es kann außer Code auch normaler Text als Erklärung, Überschriften etc. eingegeben werden. IPython Notebook wird als Jupyter Notebook weiterentwickelt und ist in dem aktuellen Anaconda Paket enthalten. https://jupyter.org/ Code in einer Textdatei Python Code - Code in Microsoft Editor (engl. Notepad) . Bei umfangreichen Code ist es üersichtlicher den Code in einer Textdatei mit der Endung .py zu speichern. Der Code wird mit dem Progammaufruf für Python in der Eingabeaufforderung aufgerufen. Bei Windows mit python.exe und der Name der Textdatei. Der Pfad und die Endung .exe kann entfallen, da meist bei der Installation von Python durch Eintragung in die Umgebungsvariablen das klar gemacht wurde. python beispiel.py http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung Das Programm beispiel.py wird aufgerufen. Wenn die Eingabeaufforderung nicht im gleichen Ordner steht wie die Datei, muss der Pfad angegeben werden. Zum Beispiel unter Windows python C:\Temp\test.py In der Konsole wird die Datei mit execfile("C:/Temp/beispiel.py") aufgerufen. Hier auch unter Windows Schrägstriche nicht Backslash für den Pfad benutzen. In IPython kann die Datei mit dem magic command %run aufgerufen werden (IPython) Der Code wird mit einem einfachen Texteditor, wie zum Beispiel Windows Editor, Gnu Emacs, Vi, Nano (Linux) geschrieben. Auf keinen Fall mit Word! Besser ist ein guter Texteditor, zum Beispiel Notepad++ (Windows) http://notepad-plus-plus.org/ TextWrangler (MacOS) http://www.barebones.com/products/textwrangler/download.html Hier werden die Befehle farbig gekennzeichnet (Progammsprachauszeichnung) Tipp: Es gibt noch eine andere witzige Art Python Code auszuführen. Python online http://www.tutorialspoint.com/execute_python_online.php Python muss auf dem Rechner nicht installiert sein. Python2 und Python3 ist möglich. Um kleine Codes zu testen ganz brauchbar Was passiert wenn ich ein Python Programm startet? Die Python Programme liegen als lesbarer Quellcode ("Source code") vor. Dateiendung ist py. Wenn das Programm mit Python gestartet wird, wird die Datei in einen Bytecode ("Bytecode") umgewandelt. Es wird von kompilieren gesprochen. Diesen Bytecode sieht man normalerweise nicht, wird aber als Datei mit der Endung pyc gespeichert. Der Bytecode wird mit der Python Virtuellen Maschine ("Python virtual machine") zum Laufen gebracht - das Programm wird ausgeführt. Quellcode (m.py) > Bytecode (m.pyc) > Python Virtuelle Maschine (PVM) Anders bei Programmen (zum Beispiel C++), die zuerst mit einem Compiler in einen für die Plattform http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung (zum Beispiel Windows) lesbaren Bytecode übersetzt werden. Dieser Bytecode auch Maschinencode genannt, wird verbreitet und kann zur Ausführung gebracht werden. Der Schritt für die Kompilierung entfällt daher, wenn das Programm gestartet wird. Bei Python entfällt die Kompilierung nur bei der 2. Ausführung, sofern der Code nicht geändert wurde. Daraus ergeben sich für Python folgende Vor- und Nachteile im Vergleich zu kompilierten Programmen (C++): + Bei Python kann der Quellcode immer gelesen und bearbeitet werden (für Firmen, die die Software verkaufen wollen, ist das ein Nachteil) + Code läuft problemlos auf allen Plattformen (Windows, Mac, Linux) - Code ist langsamer als C++, aber es gibt Module, die in C++ geschrieben wurden, wenn das geschwindigkeitsbestimmend ist, sind die Programme genauso schnell. http://www.python-kurs.eu/python3_skript_ausfuehren.php Python Run Time Structure - Neeraj's Blog Entwicklungsumgebungen Entwicklungsumgebungen oder IDE ("integrated development environment") bieten eine Erleichterung bei der Eingabe von Code. Außerdem sind weitere Funktionen, wie Debugger (Code Fehlerüberprüfung) vorhanden. IDLE (IDLE bedeutet Integrated DeveLopment Environment - und Eric Idle war Gründungsmitglied der Monty Python) IDLE ist bei der Standardinstallation von Python enthalten. http://code.google.com/p/pythonxy/wiki/GettingStarted Spyder wird unter Windows mit den Paketen Python(X,Y) und Anaconda oder dem portablen WinPython installiert. Dokumentation Spyder Eine kurze Einführung in Spyder gibt es unter http://www.southampton.ac.uk/~fangohr/blog/spyder-the-python-ide.html http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung IDE - Spyder Tipps für Spyder Strg + Leertaste -> Autovervollständigung, zum Beispiel bei Variablen, Methoden und Funktionen. Strg + I -> Hilfesystem Inspector wird für die gesuchte Funktion oder Methode geöffnet Strg + S -> speichert aktuelle Seite. Vorlage für eine neue Codeseite, siehe unten. Dreifacher Klick mit der Maus markiert eine Zeile -> Zeile kann kopiert werden http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung Seit 2013 gibt es eine kostenlose Version von PyCharm der Firma JetBrains. https://www.jetbrains.com/pycharm/ Die Community Version ist unter der Apache 2 OpenSource frei erhältlich. Die Software ist in Java geschrieben und daher auch unter Linux, Windows und MacOSX erhältlich. Für Studenten wird ein interaktives Lernprogramm "PyCharm Education Edition" für Python angeboten: https://www.jetbrains.com/pycharm-educational/ http://www.heise.de/newsticker/meldung/Python-IDE-JetBrains-veroeffentlicht-PyCharm-Version-fuer-Studenten-2441050.html Nützlich ist auch SciTe, das auch andere Programmiersprachen unterstützt. http://www.scintilla.org/SciTE.html Auch für die umfassende Entwicklerumgebung Eclipse gibt es ein Plugin, das PyDev. http://pydev.org/ Python 2 oder Python 3 Im Moment gibt es 2 Versionen von Python. Python 2.7.10 und Python 3.4.3 können zurzeit unter https://www.python.org/downloads/ heruntergeladen werden. (Stand Juli 2015). Mit Python 3 wurden einige wesentliche Neuerungen durchgeführt. Leider ist Python 3 nicht abwärts kompatibel. Das es aber viele Programme in Python 2 gibt und viele Module und Pakete wie zum Beispiel Python XY nur für Python 2 erhältlich sind, muss noch mit Python 2 gearbeitet werden. Mit Hilfe magischer Befehlszeilen, siehe unten, können auch Python 3 Programme mit Python 2 (> Version 2.6) ausgeführt werden. Im Kurs wird Python 2.7 aus der Distribution Python(X,Y) eingesetzt (Informationen). Damit alle Skripte laufen, bitte folgenden Code am Anfang des Programms einsetzen: from __future__ import division Hintergründe siehe diesen Artikel. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung Eine ähnliche Anweisung gibt es auch für print, damit der Code für Python 3 kompatibel bleibt. from __future__ import print_function Werden Sonderzeichen und Umlaute im Kommentar und Zeichenketten eingesetzt am Anfang des Codes folgendes einfügen: # -*- coding: utf-8 -*- Anweisung für Spyder Diese Anweisungen könne in Spyder automatisch für jede neuen Code eingefügt werden.. Spyder öffnen und mit dem Menü "Tools" die "Preferences" öffnen. Den Punkt "Editor" Register "Advanced Settings" und die Schaltfläche "Edit templates for new modules " wählen. Die Anweisungen einfügen und das template.py speichern Literatur, Tutorials Spitzweg 1850, Bücherwurm - Wikimedia Commons Python Dokumentation Python 3 https://docs.python.org/3/contents.html Python 2 http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung https://docs.python.org/2/contents.html Literatur, Anfänger Dr. Martin Jones, Python for Biologists, ISBN 9781492346135, bezug über Amazon. Martin Jones hat für Biologen ein super Tutorial geschrieben: http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists/ Dieser Kurs folgt dem Konzept von Martin Jones. Vom gleichen Autor ist ein Anfängerbuch Python erschienen: Martin Jones. 2015. Python for complete beginners: A friendly guide to coding, no experience required Bernd Klein, 2013, Einführung in Python 3, Carl Hanser Verlag Das Buch tritt mit dem Anspruch 'In einer Woche Programmieren lernen' an. Das ist aber nur mit dem 1. Teil (bis S. 189) realisierbar. Der Rest des Buches bietet viele Informationen für anspruchsvolle Programmierung. Bernd Klein bietet Python Kurse an und seine Ausführungen sind auch gut verständlich und kompetent. Einen Online-Kurs findet sich unter http://www.python-kurs.eu/ Weiterführende Literatur Dr. Martin Jones, 2013, Advanced Python for Biologists, http://pythonforbiologists.com/index.php/books/ Fortsetzung des Klassikers "Python for Biologists". Didaktisch hohes Niveau. Mitchell L Model, 2010, Bioinformatics Programming Using Python, O'Reilly, 1. Auflage Für Fortgeschrittene Allegra Via, Kristian Rother, Anna Tramontano, 2014, Managing Your Biological Data with Python, by Chapman and Hall/CRC. Sehr viele Beispiele aus der Biologie, gut erklärt. Für völlige Anfänger weniger geeignet. Wes McKinney, 2012, Python for Data Analysis, O'Reilly. Datenanalyse mit IPython und den Modulen NumPy und pandas Sehr gute Einführung mit anschaulichen Beispielen. Leider keine biologische Beispiele Ruediger-Marcus Flaig, 2008, Bioinformatics Programming in Python: A Practical Course for Beginners, Wiley-VCH Verlag GmbH & Co. KGaA Ich kenne das Buch leider nicht, daher keine Bewertung. Tutorials, Online Python, Videos http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung Oliver Kohlbacher, Applied Bioinformatics Group - Online Vorlesung Timms Vorlesung Bioinformatik für Lebenswissenschaftler, 2. Stunde Vorlesung Bioinformatik für Lebenswissenschaftler, 3. Stunde Vorlesung Bioinformatik für Lebenswissenschaftler, 4. Stunde Vorlesung Bioinformatik für Lebenswissenschaftler, 5. Stunde Dr. Martin Jones - Python for Biologists http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists/ Programming Course for Biologists at the Pasteur Institute http://www.pasteur.fr/formation/infobio/python/ Bernd Klein - Python Online http://www.python-kurs.eu/ Dr. Chuck (Charles Severance) - Videos, Audios, Beispiele http://www.pythonlearn.com/ Codeacademy Python Online Kurs, keine Registrierung notwendig https://www.codecademy.com/en/tracks/python TryPython Interaktiver Kurs, keine Registrierung, Plugin MS Silverlight bzw. Moonlight nötig. http://www.trypython.org/ Learnpython.org Online Kurs, keine Registrierung http://www.learnpython.org/ Python an der Uni Tübingen KIS - Kurs am ZDV - Einführung in Python, Oktober 2015 https://www.kis.uni-tuebingen.de/kis4/kursdetails.php?id=15010124 Oliver Kohlbacher, Applied Bioinformatics Group - Online Vorlesung Timms Vorlesung Bioinformatik für Lebenswissenschaftler, 2. Stunde Vorlesung Bioinformatik für Lebenswissenschaftler, 3. Stunde Vorlesung Bioinformatik für Lebenswissenschaftler, 4. Stunde Vorlesung Bioinformatik für Lebenswissenschaftler, 5. Stunde Oliver Kohlbacher, Applied Bioinformatics Group - Introduction to Python - Linksammlung http://abi.inf.uni-tuebingen.de/Teaching/tutorials/introduction-to-python Jan Benda - Einführung in wissenschaftliche Datenverarbeitung http://campus.verwaltung.uni-tuebingen.de/lsfpublic/rds? state=verpublish&status=init&vmfile=no&moduleCall=webInfo&publishConfFile=webInfo&publishSubDir=veranstaltung&veranstaltung.veranstid=109969 http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - Einführung Kenneth Berendsen, ZMBP - Motif Mapper for Python http://www.uni-tuebingen.de/fakultaeten/mathematisch-naturwissenschaftliche-fakultaet/fachbereiche/zentren/zmbp/plant-physiology/researchgroups/harter/berendzen/motif-mapper-for-python.html Chris Culy, Seminar für Sprachwissenschaften http://www.sfs.uni-tuebingen.de/~cculy/courses/S2014/ModelsSem/resources.html Python Package achrolab, Psychologie http://www.uni-tuebingen.de/psychologie/meth/achrolab Programmieren in der ArcGIS-Umgebung mit Python, Geographie http://www.geo.uni-tuebingen.de/arbeitsgruppen/geographie/forschungsbereich-geographie/gis-zentrum/kurse-und-vortraege/programmieren-in-derarcgis-umgebung-mit-python.html Kurs-Wissenschaftliches Rechnen und Visualisierung für Geowissenschaftler http://www.geo.uni-tuebingen.de/arbeitsgruppen/mineralogie-geodynamik/forschungsbereich/geologie-geodynamik/workgroup/people/willikappler/wissenschaftliches-rechnen-und-visualisierung-fuer-geowissenschaftler.html Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Wissenschaftlich Arbeiten mit Computer und Internet Kursübersicht Im Skript suchen Bioinformatik Python Tag 1 1. Einführung 2. Strings 3. Dateien Tag 2 4. Listen,Schleifen 5. Funktionen Bioinformatik Tag 1 Python - Zeichenketten - "Strings" Nach einer Idee und mit Beispielen von Dr. Martin Jones http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists Übungsaufgaben ILIAS Übungsaufgaben zip Tag 3 6. Verzweigung 7. Reg.Exp. Tag 4 8. Dictionaries 9. System/Input Index Impressum Arbeiten mit "Strings", sind aber keine Zeichenketten - Wikimedia Commons Biologen und Programmierer von Python haben eine Gemeinsamkeit, sie sind an Zeichenketten interessiert. Wenn in der Biologie programmiert wird, dann sind oft Buchstaben im Spiel. Gensequenzen, Aminosäuresequenzen oder Textdateien aus Datenbanken, die analysiert werden. Solche Abfolgen von Buchstaben werden Zeichenketten genannt, englisch Strings. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Wir beginnen damit einen Text auf den Bildschirm zu bringen. Das wird mit dem Befehl print() in Python gemacht. Wir fangen mit dem Klassikercode der Programmiersprachen an. Auf der Seite codingground wird die Programmierung von "Hello world" für viele Programmiersprachen gezeigt. print("Hello world") print() ist eine Funktion "Hello world" ist der Parameter ("argument") der Funktion. Mehrere Parameter werden mit Kommas getrennt. Beim Aufruf der Funktion wird der Parameter zum Argument. Daher werden beide Begriffe Parameter und Argument oft als Synonyme verwendet. Ausgegeben wird Hello World print in Python2 und Python3 siehe Python2 oder 3? In Python 2 geht das auch mit einer Anweisung ("statement") print "Hallo Welt" Ab Python3 ist "print" aber keine Anweisung mehr, sondern eine Funktion print(). Die print Anweisung würde in Python 3 zu einer Fehlermeldung führen. Um auch in Python 2 das Verhalten von Python3 zu erzeugen, kann am Anfang des Codes folgende Zeile eingefügt werden . from __future__ import print_function Jetzt wird in Python2 die print Anweisung nicht mehr akzeptiert und der Code wird auch garantiert in Python3 verstanden. In Zukunft werden wir daher nur die print() Funktion verwenden. Bei der print()-Funktion werden die Werte mit einem Leerzeichen ' ' getrennt ausgegeben und am Ende wird eine neue Zeile (next line \n) eingefügt. Wenn das geändert werden soll, können mit end='' und sep='' andere Werte definiert werden. Beispiel print('text1','text2',end='',sep='\t') Mit dem Parameter file=datei01 kann auch in eine Datei ausgegeben werden ( datei01 muss vorher geöffnet werden, siehe Datei öffnen). Ausführlichere Erläuterungen zur print() -Funktion siehe Bernd Klein http://www.python-kurs.eu/python3_print.php http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings String in Anführungszeichen Text muss immer in Anführungszeichen eingeschlossen werden. Es geht einfaches Hochkomma ' als auch doppeltes Anführungszeichen ". print("Hello world") print('Hello world') Doppeltes oder einfaches Anführungszeichen müssen sinnvoll kombiniert werden. Beispiele: print("Decartes sagte, 'Ich denke, also bin ich.'") print('Precht sagte, "Wer bin ich - und wie viele?"') Hinweise: Stings mit drei doppelten Anführungszeichen " " " kann auch über mehrere Zeilen gehen. print(" " " Hello World" " ") Dies wird dann auch mit neuer Zeile ausgegeben. Strings mit doppelten Anführungszeichen in jeder Zeile, werden in einer Zeile ausgegeben. print("erste Zeile" "zeite Zeile" werden als erste Zeilezeite Zeile ausgegeben. Variablen werden nicht in Hochkommas oder Anführungszeichen eingeschlossen Beispiel print("Wert1:",a) Dabei ist a eine Variable. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Bundesarchiv - Wikimedia Commons Kommentare Die Kommentierung eines Codes ist sehr wichtig. Es kann das Programm leichter nachvollzogen werden. Daher den Progammcode immer mit Kommentare versehen. Gute Praxis ist auch das Programm mit einer Beschreibung, Name des Programmierers und Datum sowie Versionsnummer zu versehen (Best coding practices). Kommentare für eine Zeile werden mit dem Zeichen # begonnen. Der Kommentar geht bis zum Zeilenende. Kommentare über mehrere Zeilen werden mit 3 Anführungszeichen oder Hochkommas ("Triple quote") " " " begonnen und mit 3 Anführungszeichen " " " abgeschlossen. Kommentare werden nicht ausgegeben. # Der Kommentar geht bis an das Ende der Linie # und wird nicht ausgegeben. print("Beispiel zu Kommentare") """ Der Kommentar umfasst mehrere Zeilen. Wird mit 3 Anführungszeichen begonnen und abgeschlossen. """ http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings print("Beispiel zu Kommentare") Hansueli Krapf - Wikimedia Commons Fehlermeldungen und "debugging" Python reagiert auf Fehler und zeigt eine Hilfe an. "Debugging" bezeichnet die Fehlersuche und -behebung. Beispiel, Code ohne Anführungszeichen print(Text ohne Anfuehrungszeichen) Es wird folgendes ausgegeben SyntaxError: invalid syntax Beispiel, falscher Funktionsname prin("Funktionsname ist falsch") Es wird folgendes ausgegeben Traceback (most recent call last): File "C:/Documents and Settings/...d/Desktop/python-kurs13-14-01.py", line 1, in <module> prin("Funktionsname ist falsch") NameError: name 'prin' is not defined http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Python zeigt die fehlerhafte Zeile prin("Funktionsname ist falsch" Und dass ein falsche Name vorliegt: NameError: name 'prin' is not defined Anweisung über 2 Zeilen Eine Anweisung muss in einer Zeile sein. print("Erste Zeile zweite Zeile") Es wird folgendes ausgegeben SyntaxError: EOL while scanning string literal Python ist an das Ende der Zeile gekommen (EOL=end of line) ohne dass die Anweisung abgeschlossen wurde. Wikimedia Commons Escapezeichen In der Ausgabe eine neue Zeile einfügen Wenn in einem String eine neue Zeile eingefügt werden soll, kann das mit einem besonderen Zeichen gemacht werden. \n Der verkehrte Schrägstrich ("Backslash") maskiert das n. n wird dadurch zu einem Sonderzeichen im Code, der bedeutet, dass eine neue Zeile in der Ausgabe eingefügt werden soll. \ wird auch Escape- oder Fluchtzeichen genannt. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings # Eine neue Zeile in einem String einfuegen print("Erste Zeile\nzweite Zeile") Andere Escapezeichen sind \t - tab-Zeichen \r - der Cursor spring an den Anfang der Zeile ("carriage return") Siehe auch Python Documentation. Variable Density Wind Tunnel - Wikimedia Commons Zeichenketten in Variablen speichern Eine Variable ist ein Behälter für eine Rechnungsgröße. In Python muss die Variable nicht "deklariert" werden, das heißt am Anfang des Codes eingeführt werden. Die Variable muss nicht dimensioniert werden. Python merkt selbst was für ein Typ die Variable ist. Das macht Python zunächst einfacher, aber durch Tippfehler in Variablennamen und falsche Typisierung kommen leicht Fehler in den Code, der schwer aufzuspüren ist. # Einen String in eine Variable speichern my_dna="CTGATCATAT" Der Variablen wird ein Wert in unserem Beispiel ein String zugewiesen ("assigning a variable"). Das Gleichheitszeichen "=" bedeutet hier also etwas anderes. Das Programm merkt sich den Wert "CTGATCATAT" unter dem Variablenname my_dna. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Es kann jederzeit ein anderer Wert der variablen my_dna zugewiesen werden. Es kann nun die Variable wie der Wert eingesetzt werden. # Einen String in eine Variable speichern my_dna="CTGATCATAT" # Die Variable mit print() ausgeben print(my_dna) In der print() -Anweisung fehlen bei Variablen die Anführungszeichen. Variablennamen können jeden Buchstaben oder jede Zahl enthalten, außer eine Zahl am Anfang. Und natürlich darf kein Leerzeichen enthalten sein. Dafür wird gerne ein Unterstrich "_" genommen. Sonderzeichen wie $, §, % und Bindestrich "-" gehen nicht! Außerdem dürfen in Python reservierte Wörter nicht eingesetzt werden (z.B. print, and, class, import...) Groß- und Kleinschreibung im Variablennamen werden unterschieden. Für den Namen der Variablen einen bezeichnenden Namen geben. Das bewahrt den Überblick. Mit Zeichenketten arbeiten Nun möchten wir mit Strings etwas machen. Zuerst sollen Strings verknüpft werden. Bundesarchiv - Wikimedia Commons http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Zeichenketten verknüpfen ("Concatenation") Wie zwei Zahlen mit einem Pluszeichen zusammengezählt werden, können Strings mit "+" verknüpft werden. # Strings verknuepfen my_dna="CTGA" + "ATGATGCGAT" print(my_dna) Es kann auch eine Variable mit einem String verknüpft werden # String und Variable verknuepfen my_dna="CTGA" print(my_dna + "ATGATGCGAT") Hier ist zu beachten, dass die Variable und der String den gleichen Variablentyp haben müssen. Sowohl my_dna, als auch "ATGATGCGAT" sind Strings. Das geht also. Folgendes geht nicht. # String und Variable = Zahl verknuepfen my_dna=3 print(my_dna + "ATGATGCGAT") # Das produziert eine Fehlermeldung! Es wird folgende Fehlermeldung ausgegeben. Traceback (most recent call last): File "C:/Documents and Settings/.../Desktop/python-kurs13-14-01.py", line 3, in <module> print(my_dna + "ATGATGCGAT") TypeError: unsupported operand type(s) for +: 'int' and 'str' Der Operator "+" kann die Typen Integer (int) und String (str) nicht verknüpfen. Es gibt Funktionen, die Variablen von einem Typ in einen anderen Typ verwandeln können. Zum Beispiel str() verwandelt eine Variable vom Typ Zahl in den Typ Zeichenkette. Das wird weiter unten behandelt. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Wikimedia Commons Die Länge einer Zeichenkette bestimmen ("len") Die Funktion len() bestimmt die Länge einer Zeichenkette ("length") # Laenge einer Zeichenkette len("ATGCTA") Der Code zeigt kein Ergebnis. Die Zahl 6 wird im Programm festgehalten, aber nicht auf dem Bildschirm ausgegeben. Das Ergebnis der Funktion ist ein "return value". Es muss mit print() zur Ausgabe gebracht werden. Hinweis: In der interaktiven Python-Konsole wird die Zahl ausgegeben! # Laenge einer Zeichenkette print(len("ATGCTA")) http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Jetzt wir "6" ausgegeben. Es kann auch folgendermaßen geschrieben werden. # Laenge einer Zeichenkette dna_length=len("ATGCTA") print(dna_length) Jetzt wird wieder das Ergebnis "6" ausgegeben. Welchen Typ hat das Ergebnis? Das Ergebnis ist eine Zahl. Also Achtung wenn das Ergebnis verknüpft werden soll. Folgendes geht daher wieder schief. # Laenge einer Zeichenkette und mit String ausgeben my_dna="ATGCTA" dna_length=len(my_dna) print("Die Laenge der DNA ist" + dna_length) # Achtung es wird eine Fehlermeldung ausgegeben. Es wird die bereits bekannte Fehlermeldung TypeError: unsupported operand type(s) for +: 'int' and 'str' ausgegeben. Der Code kann mit der Funktion str() repariert werden. str() nimmt eine Zahl als Parameter und gibt einen String als return value aus. # Laenge einer Zeichenkette und mit String ausgeben my_dna="ATGCTA" dna_length=len(my_dna) print("Die Laenge der DNA ist " + str(dna_length)) Jetzt wird eine korrekte Aussage ausgegeben. Hinweis: Das Beispiel zeigt, dass mehrere Aussagen mit Klammern verschachtelt werden können. IDLE und Spyder helfen bei der Überprüfung der Klammern. Bei IDLE dazu mit der Maus in die entsprechende Stelle klicken und Menü Edit : Show surrounding paranthesis (Strg + 0) aufrufen. Die umgebende Klammer wird als graues Feld angezeigt. In Spyder werden die Klammern farblich markiert, wenn darauf geklickt wird oder der Cursor darauf gesetzt wird. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Alles nur ein Typ Holz - Wikimedia Commons Großbuchstaben in Kleinbuchstaben und umgekehrt ("upper", "lower") DNA- oder Aminosäuresequenzen können in Großbuchstaben oder Kleinbuchstaben dargestellt werden. Es gibt die Methoden lower() und upper() um das durchzuführen. Methoden beziehen sich im Gegensatz zu Funktionen auf ein bestimmtes Objekt, hier zu string. Daher ist die Syntax anders als bei Funktionen. # Sequenz in Kleinbuchstaben verwandeln my_dna="ATGCTA" print(my_dna.lower()) Die Syntax ist Variablenname Punkt Methode () my_dna.lower() Für lower() gibt es keine Parameter, daher wird eine leere Klammer () geschrieben. Die Methode ändert die Variable my_dna nicht. Der Wert der Variablen bleibt "ATGCTA" in Großbuchstaben. Das Ergebnis der Methode muss mit print() auf den Bildschirm ausgegeben werden. Die Methoden lower() und upper() funktionieren nur mit strings. (Ist eine Methode des Objekts string) Daher liefert folgendes einen Fehler. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings # len() und Methode lower my_dna="ATGCTA" dna_length=len(my_dna) print(dna_length.lower()) #Achtung produziert Fehler Es wird der Fehler AttributeError: 'int' object has no attribute 'lower' angezeigt. Suchen und ersetzen - Bundesarchiv - Wikimedia Commons Ersetzungen ("replace") http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Aminosäuren in einem Protein sollen gegen eine andere ausgetauscht werden. Dazu wird wieder eine Methode verwendet, die replace() genannt wird. # Replacement my_protein="MADDWDLHAVVR" #Tausche Alanin A gegen Gycin G print(my_protein.replace("A","G")) Die Methode replace() nimmt 2 Parameter auf. Beide müssen strings sein. Welches Zeichen gesucht wird und das Zeichen das damit ersetzt wird. Es können auch mehrere Zeichen ersetzt werden. # Replacement my_protein="MADDWDLHAVVR" #Tausche MAD gegen HIL print(my_protein.replace("MAD","HIL")) Teilstring bestimmen - Bundesarchiv - Wikimedia Commons Teilstrings bestimmen ("Substrings") Aus einer Sequenz soll ein Teilstring extrahiert werden. Zum Beispiel wollen wir aus einer Aminosäuresequenz von der 3. Aminosäure bis zur 6 Aminosäure die Sequenz erhalten. Python behandelt einen String wie eine Liste. Daher kann leicht mit der Syntax der Listen ein Teilstring erstellt werden. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Die eckige Klammer [ ] deutet das an. # Substring my_protein="MADDWDLHAVVR" #Gebe die 3.bis 6. Aminosaeure aus print(my_protein[2:6]) Es wird DDWD ausgegeben. Achtung bei der Zählung wird mit 0 gestartet nicht mit 1. Daher bedeutet 2 in my_protein[2:6] nicht die 2. sondern die 3. Aminosäure. Die Stoppstelle ist ausschließlich. Das heißt das Programm nimmt alles bis 5 aber nicht 6. Und da wieder mit 0 als erstes gezählt wird, bedeutet diesmal 6 auch bis einschließlich 6. Aminosäure. -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 HELLO WORLD 0 1 2 3 4 5 6 7 8 9 10 Abb.: Index von "Hello World" my_protein[0] gibt das 1. Zeichen aus. my_protein[2:100] gibt das Zeichen von der 3. Stelle bis an das Ende aus, da die Länge kleiner als 100 ist. Stattdessen kann auch my_protein[2:] geschrieben werden, also 3. bis ans Ende. Wenn my_protein[:] geschrieben wird, wird die ganze Zeichenkette ausgegeben. my_protein[:2] gibt dagegen bis zur 2. aus, entspricht [0:2]. Sollen die letzten Zeichenketten bestimmt werden, kann mit minus gearbeitet werden. my_protein[-1] gibt das letzte Zeichen aus. my_protein[-2:] gibt die beiden letzten aus. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Guillaume Paumier -Wikimedia Commons Anzahl der gefundenen Teilstrings ("count") In einer Aminosäuresequenz soll die Anzahl der gefundenen Substrings gezählt werden. Die Methode count() zählt die Anzahl der Substrings in einem String. Hier das Beispiel # Substring zaehlen my_protein="MADDWDLHAVVR" # Zaehle die Alanine alanin_count=my_protein.count('A') print("Anzahl Alanin ist " + str(alanin_count)) count() ist eine Methode mit einem Parameter, das Suchstring. Allerdings gibt count eine Zahl aus. Wenn wir das mit print() zusammen mit einem string ausgeben wollen, muss daher diese Zahl mit der Funktion str() in einen String verwandelt werden. Hinweis zu print(): Statt die Zeichenketten mit '+' zu verknüpfen, kann auch ein Komma eingesetzt werden. Dann können verschiedene Typen als Parameter benutzt werden. print("Anzahl Alanin ist", alanin_count) In Python 2 werden allerdings auch die Klammern ausgegeben, ohne die magische Anweisung from __future__ import print_function. Beachte, dass in Python 3 print immer als Funktion print() verwendet werden muss und nicht mehr als print statement. https://docs.python.org/3.0/whatsnew/3.0.html http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Also in Python 2 aber nicht in Python3 geht print "Anzahl Alanin ist ", alanin_count Wegen Kompatibilität stets print() als Funktion verwenden. Bundesarchiv -Wikimedia Commons Einen Substring suchen ("find") In einer Sequenz interessiert uns oft die Stelle, wo ein bestimmter Suchstring gefunden wird. Die Methode find() gibt die Position aus, an der ein Zeichen gefunden wird. # Substring finden, Achtung mit Fehler my_protein="MADDWDLHAVVR" # suche Alanine alanin_find=my_protein.find('A') print("Alanin ist an " + str(alanin_find) + ". Stelle") ist eine Methode mit einem Parameter, das Suchstring. Allerdings wird eine Zahl ausgegeben. Wenn wir das mit print() zusammen mit einem String ausgeben wollen, muss daher diese Zahl mit der Funktion str() in einen String verwandelt werden. find() Das Beispiel stimmt noch nicht ganz. Eigentlich müsste die 2. Stelle ausgegeben werden. Es wird aber die 1. Stelle ausgegeben, daher print("Alanin ist an " + str(alanin_find+1) + ". Stelle") Daran denken, dass ab 0 gezählt wird! Wenn ein Zeichen nicht gefunden wird, wird -1 ausgegeben. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings Das Programm ist noch nicht perfekt, Alanin ist auch an 9. Stelle zu finden. Es wird immer das erste Auftreten angegeben. Später in den Regular Expressions wird ein besserer Ansatz verfolgt. Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02] ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben Wissenschaftlich Arbeiten mit Computer und Internet Kursübersicht Im Skript suchen Bioinformatik Python Tag 1 1. Einführung 2. Strings 3. Dateien Tag 2 4. Listen,Schleifen 5. Funktionen Bioinformatik Tag 1 Python - Dateien lesen und schreiben Nach einer Idee und mit Beispielen von Dr. Martin Jones http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists Übungsaufgaben ILIAS Übungsaufgaben zip Tag 3 6. Verzweigung 7. Reg.Exp. Tag 4 8. Dictionaries 9. System/Input Index Impressum David Bohl - Wikimedia Commons http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04] ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben Bisher haben wir die Daten (Sequenzen etc. ) in dem Programm selbst eingegeben. Es können auch Daten unmittelbar in einer Eingabeaufforderung eingegeben werden (Siehe Input() und sysarv()). In der Biologie werden Daten aber meist über Dateien eingegeben. Das ist zweckmäßiger, da unterschiedliche Daten mit dem gleichen Programm verarbeitet werden können. Darüber hinaus sind die Daten sehr umfangreich und sollten daher nicht mit dem Programm vermischt werden. Welche Dateien können verwendet werden? Python kann eigentlich nur Textdateien auslesen. Mit zusätzlichen Modulen können aber auch Exceldateien und ähnliches ausgelesen werden. Beispiele für Textdateien Fasta und andere Formate für DNA- oder Proteinsequenzen. http://de.wikipedia.org/wiki/FASTA-Format Dateierweiterung ist .fa, .mpfa, .fna, .fsa oder .fasta. Besteht in der ersten Zeile aus einer Kopfzeile ("Headerline") mit eindeutigen Namen, Nummern und Beschreibungen. Gefolgt werden Zeilen mit der Nukleinsäuresequenz oder Proteinsequenz. Die Nukleinbasen bzw. Aminosäuren folgen einem Einbuchstabencode. GenBank (Beispiel) Das Format der GenBank GenBank Startseite Wikipedia) Es gibt noch weitere Sequenz Formate siehe http://www.ncbi.nlm.nih.gov/Sequin/sequin.hlp.html#SequenceDataFormat http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04] ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben HTML Webseiten. Internetseiten sind als Textdateien formatiert. Mit Python können Internetseiten ausgewertet werden. HTTP Abfragen können durchgeführt und HTML Formulare erstellt und ausgewertet werden. Für Webseiten ist eigentlich PHP die bevorzugte Skriptsprache. Abfragen aus Datenbanken (BLAST, CLUSTAL W) Siehe Biopython Tutorial http://biopython.org/DIST/docs/tutorial/Tutorial.html http://biopython.org/wiki/SeqIO Tabelle in CSV Format (Comma separated values) oder Tabellen mit Tab oder Semikolon getrennten Werten. Analysegeräte geben Tabellen als einfache Textdateien aus. Mit Python können sie ausgewertet werden. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04] ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben Abb.: Typische Datei aus einem Floureszenz Plattenleser. Jeder "count" entspricht einer Platte mit 8 x 12 Proben Bisher haben wir Daten nur über den Programmcode eingegeben. Es gibt die Möglichkeit mit der Funktion input() Daten über die Konsole einzugeben (Siehe unten) Das Ergebnis eines Programms konnte bisher nur auf dem Bildschirm dargestellt werden. Mit Python kann auch direkt in eine Datei geschrieben werden. In eine Datei mit Weiterleitung ">" schreiben Unter Windows und Linux kann das Ergebnis mit Hilfe von einer Weiterleitung, Symbol ">", in eine Textdatei geschrieben werden. Die Eingabeaufforderung unter Windows aufrufen. (Strg + R und cmd eingeben.) In den Ordner mit der Pythonprogrammdatei wechseln (sonst muss ein Pfad eingegeben werden). python code.py > ausgabedatei.txt python = das Programm Python wird code.py = das Python Programm aufgerufen > Weiterleitung = die Ausgabedatei in die geschrieben wird. Ist die Datei nicht im gleichen Ordner, muss der Pfad angegeben werden. ausgabedatei.txt http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04] ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben Computer History Museum - Wikimedia Commons Textdatei öffnen und lesen Mit Python eine Textdatei zu lesen ist sehr einfach. Zuerst muss die Datei geöffnet werden. Anschließend wird die Datei gelesen. # Datei oeffnen und lesen my_file=open("dna.txt") file_contents=my_file.read() print(file_contents) Mit my_file=open("dna.txt") wird die Datei geöffnet. Die Anweisung file_contents=my_file.read() liest die Datei aus. Ein print(file_contents) macht den Inhalt der Datei für den Bildschirm sichtbar. Mit der Funktion open () wird ein Objekt erzeugt. my_file.read ist eine Methode dieses Objektes. In dem Beispiel wird davon ausgegangen, dass sich die Datei dna.txt im selben Ordner wie die Programmdatei befindet. Ist die Datei woanders, muss ein Pfad eingegeben werden. Der Pfad unterscheidet sich je nach Betriebssystem. Pfade Liegt die Datei, die geöffnet werden soll nicht in dem gleichen Ordner wie die Programmdatei, muss ein Pfad angegeben werden. Die Pfade unterscheiden sich je nach verwendeten Betriebssystem. Das macht den Python-Code leider nicht so universell! Für die unten angeführten Beispiele gilt, die Datei liegt in einem Ordner "beispiel" auf dem Desktop. Der angemeldete Benutzer heißt "mueller". Unter Windows (Vista,7, 8 etc.) lautet der Pfad. my_file=open("c:\\Benutzer\\mueller\\Desktop\\beispiel\\dna.txt") http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04] ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben MacOSX benutz folgende Pfadstruktur my_file=open("/Users/mueller/Desktop/beispiel/dna.txt") Und in Linux my_file=open("/home/mueller/Desktop/beispiel/dna.txt") Es kann der absolute oder relative Pfad angegeben werden. Beim relativer Pfad ist der Ort der Programmdatei der Bezugspunkt. Zum Beispiel liegt die Programmdatei auf dem Desktop, dann muss für Windows folgendes eingegeben werden. my_file=open("beispiel\\dna.txt") Lesend öffnen könnte auch der Parameter "r" angegeben werden. my_file=open("dna.txt", "r") Da es aber für open() Standard ist, wird es meistens weggelassen. Hinweis - rstrip() Die Textdatei dna.txt enthält am Ende der Zeile einen Befehl "Neue Zeile" (Line Feed oder next line). Das ist in Textdateien oft der Fall und oft unerwünscht. Daher gibt es eine Methode rstrip() , die diese unerwünschten Zeichen rechts entfernen. my_dna = file_contents.rstrip("\n") In der Klammer wird angegeben, welches Zeichen entfernt wird. \n ist ein Escapezeichen und bedeutet next line. Dave Mills - Wikimedia Commons In eine Textdatei schreiben Um in eine Textdatei zu schreiben sieht das Vorgehen ganz ähnlich aus, wie beim Lesen einer Textdatei. Hier wird der Parameter "w" beim Öffnen der Datei mitgegeben. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04] ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben Es wird die Methode write() eingesetzt. # Datei oeffnen und schreiben my_file=open("out.txt", "w") my_file.write("Hallo Welt") Die Datei wird schreibend geöffnet my_file=open("out.txt", "w") Der Dateiname der Datei ist out.txt und liegt im selben Ordner wie die Programmdatei. Wenn nicht, muss ein Pfad angegeben werden (siehe oben). "w" ist der Parameter für schreiben. (w wie "write") Besteht die Datei noch nicht, wird sie neu angelegt. Ganz korrekt ist das ein überschreiben. Besteht die Datei bereits, wird der Inhalt überschrieben. Ist kein Parameter angegeben wird lesend geöffnet. Es kann bei lesend öffnen auch der Parameter "r" angegeben werden. (r wie "read"). Ein weiteres möglicher Parameter ist "a". Wird das verwendet, wird Text einer bestehende Datei an das Ende der Datei angehängt (a wie "append'). Sergey Vakulenko - Wikimedia Commons Textdatei schließen Die Textdatei sollte an Ende des Programms wieder geschlossen werden. Das ist gute Programmierpraxis und vermeidet Probleme mit den Textdateien. # Datei oeffnen und schreiben my_file=open("out.txt", "w") http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04] ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben my_file.write("Hallo Welt") my_file.close() my_file.close() schließt die Datei wieder. Es wird kein Paramenter angegeben. Die Klammer bleibt leer. Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Wissenschaftlich Arbeiten mit Computer und Internet Kursübersicht Im Skript suchen Bioinformatik Python Tag 1 1. Einführung 2. Strings 3. Dateien Tag 2 4. Listen,Schleifen 5. Funktionen Bioinformatik Tag 2 Python - Listen und Schleifen Nach einer Idee und mit Beispielen von Dr. Martin Jones http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists Übungsaufgaben ILIAS Übungsaufgaben Tag 3 6. Verzweigung 7. Reg.Exp. Tag 4 8. Dictionaries 9. System/Input Index Impressum Listen erstellen und mit Listen arbeiten In Python gibt es keinen nativen Datentyp Array wie in anderen Programmiersprachen. Arrays sind Felder oder Feldreihen mit denen sich die Daten in 1-, 2- oder mehrdimensionaler Art darstellen lassen. Allerdings gibt es den Datentyp Listen mit denen ebenfalls solche Strukturen erstellen lassen. Darüber hinaus kann mit zusätzlichen Paketen (NumPy, PyLab) Arrays erstellt werden. Wir haben unter Zeichenketten erfahren, dass eine Zeichenkette als "Liste" betrachtet werden kann. Es kann ein Substring mit my_dna[0:3] die ersten 3 Buchstaben aus der Zeichenkette my_dna="ATGCGTCATG" ermittelt werden. Es wird 'ATG' ausgegeben. Teilstrings bestimmen ("Substrings") http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Nun werden wir Listen allgemein kennenlernen. Für Listen werden eckige Klammern [ ] verwendet. Die Elemente werden mit einem Komma abgetrennt. Nicht vergessen, Strings werden wieder mit Anführungszeichen eingeschlossen. Bei Zahlen entfallen die Anführungszeichen. # Liste erstellen passeri=["Blaukelchen", "Zaunkoenig", "Baumlaeufer"] print(passeri) Mit print(passeri) wird die Liste auf den Bildschirm gebracht. Es können auch Zahlen als Elemente in eine Liste aufgenommen weren # Liste von Zahlen erstellen sequenz_nr=[23,25,30,108] print(sequenz_nr) Hinweis "Nested Lists" Außer Zahlen und Zeichenketten können in Listen noch weitere Typen eingefügt werden, Variablen oder Listen in einer Liste. Wenn Listen in Listen gesetzt werden, können sogenannte "nested lists" erstellt werden. Dadurch kann eine mehrdimensionale Matrix oder ein mehrdimensionales Array realisiert werden. Ein Beispiel sind Listen in Listen. Dies wird weiter unten mit Tabellen in 2D-Listen erläutert. Das ist bis jetzt noch nicht spannend. Doch bei Listen können die einzelnen Elemente herausgelesen werden. # Liste, einzelne Elemente passeri=["Blaukelchen", "Zaunkoenig", "Baumlaeufer"] print(passeri[0]) Es wird das erste Element der Liste ausgegeben. Die Liste beginnt mit 0! Es kann auch ein Bereich ermittelt werden. # Liste, Bereich http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen passeri=["Blaukelchen", "Zaunkoenig", "Baumlaeufer"] print(passeri[0:2]) Nun werden die ersten zwei Elemente auf den Bildschirm gebracht. Die Elemente werden über einen Index angesprochen. In der eckigen Klammer stehen ein Startindex, Doppelpunkt und ein Endindex. [Start : Ende] Der Startindex beginnt bei 0. Der Endindex ist ausschließlich. Das heißt bei [0:2] werden das erste Element (Index=0) und das zweite Element (Index=1) ausgegeben. Nicht das 3. Element (Index=2), da Endindex ausschließlich arbeitet. Das letzte Element kann über [-1] ausgegeben werden. [0] - erstes [0:2] - erstes und zweites [:2] - ersten zwei [1:] - 2. bis Ende [-1] - letztes [-2:] - letzten beide Methode index() Mit Hilfe der Methode index() kann auch die Indexnummer eines Elements ermittelt werden. # Liste, Indexnummer passeri=["Blaukelchen", "Zaunkoenig", "Baumlaeufer"] passeri_index=passeri.index("Zaunkoenig") print(passeri_index) Es wird 1 ausgegeben, die Indexnummer von "Zaunkönig", das Element das an 2. Stelle steht. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Zaunkönig - losch, Wikimedia Common Ein Element ersetzen Ein Element in einer Liste kann durch ein anderes Element ersetzt werden # Liste, Element ersetzen passeri=["Blaukelchen", "Zaunkoenig", "Baumlaeufer"] passeri[1]="Buchfink" print(passeri) Mit passeri[1]="Buchfink" wird anstelle des 2. Elements "Zaunkönig" das Element "Buchfink" gesetzt. Hinweis: Es können ganze Bereiche ersetzt werden. passeri[0:2]=["Schwalbe","Mauersegler"] ersetzen die ersten beiden Elemente. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Buchfink - DickDaniels , Wikimedia Commons Element einfügen - insert() Es kann ein Element an der genau bezeichneten Stelle eingefügt werden. # Liste, einfuegen - insert passeri=["Blaukelchen", "Zaunkoenig", "Baumlaeufer"] passeri.insert(0,"Buchfink") print(passeri) Mit passeri.insert(0,"Buchfink") wird an der ersten Stelle "Buchfink" eingefügt. Das Element, das bisher den Index 0 hatte (Blaukelchen) hat nun den Index 1. Es ist also ein einfügen und nicht ein ersetzen wie oben. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Gartenbaumläufer - 4028mdk09, Wikimedia Commons Element löschen - del Um ein Element zu löschen wird die Anweisung del zur Verfügung gestellt. # Liste, loeschen - del passeri=["Blaukelchen", "Zaunkoenig", "Baumlaeufer"] del passeri[1] print(passeri) del passeri[1] del löscht das 2. Element aus der Liste. ist eine Anweisung ("Statement") Hinweis Es können auch ganze Bereiche gelöscht werden. del passeri[0:2] löscht die ersten zwei Elemente del passeri[1:] löscht ab dem 2. Element (einschließlich) den ganzen Rest http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Waldbaumläufer - Paweł Kuźniar, Wikimedia Commons Stapelverarbeitung - Element löschen - pop() Löschen geht auch mit der Methode pop() . # Liste, löschen - pop() passeri=["Blaukelchen", "Zaunkoenig", "Baumlaeufer"] entfernt=passeri.pop() print(passeri) print(entfernt) Mit der Methode pop() wird eine sogenannte Stapelverarbeitung durchgeführt. Das oberste Element im Stapel und das ist hier in der Liste das letzte wird gelöscht. Hier das Element Baumlaeufer. Das Element wird in einer Variablen gespeichert. Wenn in der Klammer der Index eingegeben wird, wird das entsprechende Element entfernt. entfernt=passeri.pop(0) Im Beispiel wird das erste Element aus der Liste entfernt und der Variablen entfernt zugewiesen. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Blaukelchen - Hans-Jörg Hellwig, Wikimedia Commons Stapelverarbeitung - Neues Element hinzufügen - append() Die Listen können mit Python erweitert werden. Dazu wird die Methode append() verwendet. # Liste, erweitern mit append passeri=["Blaukelchen", "Zaunkoenig", "Baumlaeufer"] passeri.append("Buchfink") print(passeri) Auf dem Stapel wird ein neues Element gelegt. Das bedeutet, das neue Element wird an das Ende der Liste angehängt. Hinweis Die Methode extend() fügt ebenfalls Elemente einer Liste hinzu. Allerdings verwendet extend() eine Liste als Parameter, es können mehrere neue Elemente hinzugefügt werden. Beispiel passeri.extend(["Buchfink","Gruenfink"]) http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Vogeleier - Meyers Konversationslexikon, Wikimedia Commons Länge bestimmen Wie bei Zeichenketten kann mit der Funktion len() die Länge der Liste ermittelt werden. # Liste, Laenge ermiteln passeri=["Blaukelchen", "Zaunkoenig", "Baumlaeufer"] lenght=len(passeri) print("Es sind", lenght, "Singvoegel in der Liste") http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Ara ambiguus - Amanda Grobe, Wikimedia Commons Listen vernüpfen - "concatenate" Listen können auch verknüpft werden. Dazu wird das Pluszeichen + verwendet. # Liste verknuepfen passeri=["Blaukelchen", "Zaunkoenig", "Baumlaeufer"] papageien=["Ara", "Kakadu", "Alexandersittich"] aves = passeri + papageien print("Voegel: ",aves) print("Singvoegel: ", passeri) print("Papageien: ", papageien) Die ursprünglichen Listen werden nicht verändert. Die neue Liste aves enthält nun die Element beider Listen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Cacatua alba - snowmanradio, Wikimedia Commons Listen sortieren - sort und reverse Mit Hilfe der Methoden sort() und reverse() werden die Elemente in einer Liste sortiert. # Liste sortieren aves = ["Blaukelchen", "Zaunkoenig", "Baumlaeufer", "Ara"] print("Voegel: ",aves) aves.sort() print("Voegel sortiert: ",aves) Die Anweisung aves.sort() sortiert numerisch-alphabetisch. Beachte, die ursprüngliche Variable wird überschrieben. Falsch wäre es sort() einer Variablen zuzuordnen. aves=aves.sort() zerstört die Liste! Es wird ' None ' zurückgegeben. Hinweis: Neben der Methode sort() gibt es eine eingebaute Funktion sorted(). Damit kann der sortierten Liste eine Variable zugewiesen werden mit der neuen Sortierung. Die ursprüngliche Liste ändert sich nicht. aves_sortiert = sorted(aves) print("Voegel sortiert: ",aves_sortiert) http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen # Liste umgekehrt auflisten aves = ["Blaukelchen", "Zaunkoenig", "Baumlaeufer", "Ara"] print("Voegel: ",aves) aves.reverse() print("Voegel umgekehrt auflisten: ",aves) Die Anweisung aves.reverse() stellt die Reihenfolge der Elemente umgekehrt dar. Hinweis: Mit einer Kombination aus sort() und reverse() kann absteigend sortiert werden. Es gibt in Python noch eigene Sortierfunktionen mit 'key-Parameter'. Das liegt außerhalb des Anfängerkurses. Bundestagsfrackfliege - dabasco, Wikimedia Commons Schleifen Anstatt jedes Element mit einem Index anzusprechen, kann in Python sehr effektiv mit einer for-Schleife ("for-Loop") gearbeitet werden. # for-Schleife aves = ["Blaukelchen", "Zaunkoenig", "Baumlaeufer", "Ara"] for vogel in aves: print(vogel, "ist ein Vogel") Die Schleife beginnt mit for vogel in aves: "for" kündigt die Schleife an, dann folgt "Variable x in Liste y", es wird mit http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Doppelpunkt abgeschlossen. Die Anweisungen für die Schleife sind eingerückt ("Indent"). Es kann mit ein oder mehreren Leerzeichen oder Tabs eingerückt werden. Es können mehrere Anweisungen folgen, die aber alle gleich eingerückt werden müssen. Diese Anweisungen bilden einen einheitlichen Block ("block of code"). Es ist unbedingt wichtig, die Einrückung gleich zu machen. Ein beliebter Fehler ist in einem Block Tab statt Leerzeichen zu verwenden. Üblich sind 4 Leerzeichen. In IDLE gibt es in Menü Options : Configure IDLE die Einstellung für Indentation Tabs. In Spyder wird das in Menü Tools : Preferences : Editor : Advanced settings : Indentation Characters eingestellt. Die Variable x, in unserem Beispiel vogel , gilt nur in der Schleife. Die Variable wird automatisch gesetzt und es muss kein Wert zugewiesen werden. Es gelten die gleichen Namenskonventionen wie für normale Variablen. Innerhalb des Schleifenblocks darf die Liste nicht verändert werden. Fliege - L. Hutsch, Wikimedia Commons for-Schleife mit einer Zeichenkette Statt einer Liste kann auch eine Zeichenkette verwendet werden. # Schleife mit Zeichenketten my_dna = "ATGCAT" for base in my_dna: http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen print("Base ist ", base) Fliege - LoKiLeCh, Wikimedia Commons Eine Zeichenkette in eine Liste überführen - split Mit Listen kann sehr gut gearbeitet werden. Leider liegen viele Daten nur als Zeichenketten vor. Die einzelnen Elemente sind durch ein Trennzeichen voneinander getrennt. Typisches Beispiel sind Tabellen. Hier sind die Trennzeichen Semikolon, Kommas oder Tabs. # Zeichenkette in Liste tauben = "Haustaube,Feldtaube,Ringeltaube,Turteltaube" tauben_liste=tauben.split(",") print(tauben_liste) print("Erste Taube ist ", tauben_liste[0]) Die Anweisung zum Überführen einer Zeichenkette in eine Liste ist tauben_liste=tauben.split(",") Die Methode ist split() und wird auf der Zeichenkette tauben angewendet. Als Paramenter wird das Trennzeichen verwendet. In Beispiel das Komma ",". Nachdem die Werte in eine Liste überführt wurden, können einzelne Element wie gewohnt angesprochen werden. tauben_liste[0] http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Fliege - Vera Buhl, Wikimedia Commons Datei mit for-Schleife zeilenweise lesen - Iteration Wir haben oben gesehen, dass eine Datei als Objekt geöffnet werden kann. Dieses Dateiobjekt kann nun mit einer for-Schleife ausgelesen werden. Die Datei wird zeilenweise ausgewertet. # Datei zeilenweise einlesen file = open("/Pfad/Textdatei") for line in file: #Block mit line als Schleifenvariable Hinweis: Eine Anweisung mit read ist nicht notwendig. Die Methode read und die Schleife for line in file: sollten nicht vermischt werden. Daher die Datei mit close() schließen, bevor die Datei wieder mit read() (lesend oder schreibend) geöffnet wird: http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Fliege - Vera Buhl, Wikimedia Commons for-Schleifen mit range() Schleifen werden oft mit einer regelmäßigen Abfolge von Zahlen genutzt. Statt die Zahlen aus einer Liste zu nehmen und sie in eine Schleife einzusetzen wird die Funktion range() benutzt. Schleife ohne range() # for-Schleife Basen stufenweise ausgeben ohne range my_dna = "ATGCCCTGAT" ende = [1,2,3,4,5,6,7,8,9,10] for stop in ende: substring=my_dna[0:stop] print(substring) Schleife mit range() # for-Schleife Basen stufenweise ausgeben mit range my_dna = "ATGCCCTGAT" for stop in range(11): substring=my_dna[0:stop] print(substring) Mit nur einem Parameter, wie in range(11) wird von 0 bis zu ausschließlich der Zahl hochgezählt. Es wird die Zahl angegeben für die die Schleife nicht mehr ausgeführt wird, in unserem Beispiel 11. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Also von 0 bis 10 in dem Beispiel. Es kann auch ein Bereich angeführt werden. Es wird die erste Zahl und die Zahl angegeben für die die Schleife nicht mehr durchgeführt wird. Abgetrennt durch ein Komma (Parameter in einer Funktion), nicht zu verwechseln mit Listen. wäre von 3 bis 6. Also 3,4,5,6 range(3,7) range mit Schrittweite range(3,10,2) wäre von 3 bis 6 mit Schrittweite 2. Also 3,5,7,9 Fliege - Vera Buhl, Wikimedia Commons Tabelle mit for-Schleife in eine 2D-Liste schreiben Tabellen in einer Textdatei lassen sich mit einer for-Schleife in eine 2D-Liste überfuhren. Nun kann jede Zelle in der Tabelle gezielt ausgelesen werden. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen # Datei in eine 2D Liste schreiben und auslesen file = open("tabelle.txt") table=[] for line in file: line_list=line.split(',') table.append(line_list) # ganze Tabelle ausgeben print(table) #Zum Beispiel die 2. Zeile und 1. Spalte ausgeben print(table[1][0]) Es liegt eine Textdatei mit einer Tabelle vor. Zum Beispiel Werte mit Komma getrennt ('comma seperated values' - csv) species,sequence,dna-name,expression-level H. saphiens,ATCGTCGTA,xy,200 B. perennis,GCGTGCGT,vw,150 Die Textdatei wird geöffnet. file = open("tabelle.txt") Es wird eine leere Liste erstellt. table=[] Mit der for-Schleife wird das Dateiobjekt zeilenweise ausgelesen. for line in file: Die Methode split(',') überführt line_list=line.split(',') die Zeile in eine Liste. Trennzeichen ist hier ein Komma ','. Als Trennzeichen wird oft auch ein Tab '\t' oder Semikolon ';' verwendet. Die Liste wird in eine Liste geschrieben. table.append(line_list) Dadurch wird eine "nested list" erhalten, eine Liste, die Listen als Elemente enthalten. Das sieht dann so aus: [['species', 'sequence', 'dna-name', 'expression-level\n'], ['H. saphiens', 'ATCGTCGTA', 'xy', '200\n'], ['B. perennis', 'GCGTGCGT', 'vw', '150']] Nun können einzelne Element angesprochen werden. So wird die Zelle in der 2. Zeile und in der ersten Spalte mit folgenden Code ausgegeben. print(table[1][0]) Hinweis - NumPy und pandas: Das Auswerten von Tabellen lässt sich einfacher mit den Modulen NumPy und pandas durchführen. Beide sind standardmäßig nicht in Python installiert NumPy und pandas sind hervorragende Werkzeuge für die wissenschaftliche Datenanalyse. Hier wird eine weitere Tür aufgestoßen, um Python im Wissenschaftsbereich erfolgreich einzusetzen. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen Vor allem pandas bietet umfangreiche Möglichkeiten eine Tabelle in Python einzulesen und dort zu analysieren. http://pandas.pydata.org/pandas-docs/stable/io.html?highlight=csv # Datei mit pandas in ein DataFrame schreiben und auslesen #pandas muss installiert sein! from pandas import DataFrame import pandas as pd table = pd.read_csv("tabelle.txt") # ganze Tabelle ausgeben print(table) #Zum Beispiel die 2. Zeile und 1. Spalte ausgeben print('2. Zeile und 1. Spalte = ',table.ix[1,0]) Der Code ist wesentlicher übersichtlicher und viele Methoden und Parameter erleichtern die Arbeit. geht von einer Komma separierten Tabelle aus. Wird ein anderes Trennzeichen benutzt, kann pd.read_table mit sep='Trennzeichen' eingesetzt werden. pd.read_table("tabelle.txt", sep=";") zum Beispiel. pd.read_csv Für die Spaltenüberschrift wird standardmäßig die erste Zeile genommen. Es kann auch eine andere angegeben werden (header=n) oder keine (header = None) Also folgndes ohne Spaltenüberschrift: pd.read_csv("tabelle.txt", header=None) ist ein Objekt in Python und kann mit pandas Werkzeugen analysiert werden. Hier wird zum Beispiel die Methode ix[] verwendet, um die Zelle in der zweiten Zeile und 1. Spalte anzusprechen. table Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen Wissenschaftlich Arbeiten mit Computer und Internet Kursübersicht Im Skript suchen Bioinformatik Python Tag 1 1. Einführung 2. Strings 3. Dateien Tag 2 4. Listen,Schleifen 5. Funktionen Bioinformatik Tag 2 Python - Funktionen Nach einer Idee und mit Beispielen von Dr. Martin Jones http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists Übungsaufgaben ILIAS Übungsaufgaben Tag 3 6. Verzweigung 7. Reg.Exp. Tag 4 8. Dictionaries 9. System/Input Index Impressum Neuron - Nick Gorton, Wikimedia Commons http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen Funktionen sind Programmierteile, die immer wieder aufgerufen werden können. Hauptvorteile ist dass Teile eines Programms "eingekapselt" werden können ("Encapsulation"). Es muss nur an einer Stelle programmiert werden, wird aber an anderen Stellen verwendet. Das spart Platz. Umfangreiche Programme können so in übersichtliche Teile zerlegt werden. Pflege der Programme ist erleichtert. Änderungen und Fehlerbeseitigung nur an einer Stelle in der Funktion. Wir haben bereits vordefinierte Funktionen kennenglernt. Beispiele sind print(), str() , int() , count() oder len() . Nun wollen wir eigene Funktionen definieren. Erstellen einer Funktion Zuerst wird ein Beispiel aus den Übungsaufgaben "Strings" gezeigt. # Beispiel ohne Funktion my_dna = "ATGCCCTGAT" laenge = len(my_dna) A_zahl = my_dna.count('A') T_zahl = my_dna.count('T') AT_gehalt = (A_zahl + T_zahl) / laenge print("AT Gehalt ist", AT_gehalt) In dem Beispiel wird der AT-Gehalt in einer DNA-Sequenz ermittelt. Wird an einer anderen Stelle im Programm der AT-Gehalt benötigt, muss das Programm mit kopieren und einfügen übernommen werden. Wenn sich etwas ändert, muss nun an verschiedenen Stellen im Programm gearbeitet werden. Daher verwandeln wir das Programmteil in eine Funktion. # Beispiel als Funktion def get_AT_gehalt(dna): laenge = len(dna) A_zahl = dna.count('A') T_zahl = dna.count('T') AT_gehalt = (A_zahl + T_zahl) / laenge return AT gehalt http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen Der Header der Funktion hat folgenden Aufbau: def get_AT_gehalt(dna): Die Funktion wird mit dem Befehl def eingeleitet ("define function") . Es folgt der Name der Funktion get_AT_gehalt und in Klammer werden die Parameter oder Argumente geschrieben. In dem Beispiel wird nur ein Parameter dna verwendet. Wie bei Schleifen wird mit einem Doppelpunkt : abgeschlossen. Der Body der Funktion ist eingerückt. Nicht vergessen die Einrückung muss wie allgemein üblich bei Python einheitlich sein. In der Funktion ist eine Variable dna Parameter definiert, die in der Funktion verwendet wird. Die Funktion enthält einen Rückgabewert return AT_gehalt Lässt man dieses Programm mit der Funktion durchführen, so erhält man auf dem Bildschirm - nichts. Erst wenn die Funktion im Programm aufgerufen wird ("call the function") kann mit dem Rückkgabewert etwas angefangen werden. # Funktion aufrufen # ...Funktion get_AT_gehalt wird definiert AT_gehalt = get_AT_gehalt("ATCG") print("Der AT-Gehalt ist ", AT_gehalt) Die Funktion wird mit dem Funktionsname und in Klammern die/der Parameter aufgerufen. get_AT_gehalt("ATCG") Mit print("Der AT-Gehalt ist ", AT_gehalt) erfolgt die Ausgabe auf dem Bildschirm. Hinweis: Die Variable AT_gehalt kommt innerhalb der Funktion (Funktionsvariable) und außerhalb (globale Variable) vor. Das sind zwei unterschiedliche Variablen. Die Funktionsvariablen ( dna, laenge, A_zahl, T_zahl, AT_gehalt ) gelten nur innerhalb der Funktion. Die Funktion kann noch verbessert werden. Werden Sequenzen in Kleinbuchstaben eingesetzt, wird der AT-Gehalt nicht berechnet. Daher verbessern wir die Zeilen A_zahl = dna.upper().count('A') T_zahl = dna.upper().count('T') http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen Jetzt wird die Eingabe ( dna ) in Großbuchstaben verwandelt und A bzw. T wird gefunden. Die Stellengenauigkeit der Ausgabe des AT-Gehalts ist nicht bestimmt und daher können bis zu 16-stellige Ergebnisse vorkommen. Daher wollen wir die Funktion round() verwenden. Die Funktion round() erwartet 2 Parameter. Das erste ist die Zahl, die gerundet werden soll und der 2. Parameter gibt die Stellenzahl vor. round(AT_gehalt,2) rundet auf 2 Stellen hinter dem Komma. # Funktion, verbessert mit upper und round def get_AT_gehalt(dna): laenge = len(dna) A_zahl = dna.upper().count('A') T_zahl = dna.upper().count('T') AT_gehalt = (A_zahl + T_zahl) / laenge return round(AT_gehalt,2) AT_gehalt = get_AT_gehalt("atgcat") print("Der AT-Gehalt ist ", AT_gehalt) Es wird "Der AT-Gehalt ist 0,67" auf dem Bildschirm ausgegeben. Jetzt ist die Stellenanzahl hinter dem Komma in der Funktion vorgegeben. Besser wäre es allerdings die Stellenanzahl beim Aufrufen der Funktion mitzugeben. Pyramidal hippocampal neuron - MethoxyRoxy , Wikimedia Commons http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen Funktion mit mehreren Parametern In Funktionen können auch mehrere Parameter eingegben werden. # Funktion, mehreren Parameter def get_AT_gehalt(dna, rund): laenge = len(dna) A_zahl = dna.upper().count('A') T_zahl = dna.upper().count('T') AT_gehalt = (A_zahl + T_zahl) / laenge return round(AT_gehalt,rund) AT_gehalt = get_AT_gehalt("atgcat",3) print("Der AT-Gehalt ist", AT_gehalt) Die Funktion wird mit mehreren Parameter definiert: def get_AT_gehalt(dna, rund): Beim Aufruf muss genau dese Reihenfolge eingehalten werden. get_AT_gehalt("atgcat",3) Hinweise Es sind auch Funktionen ohne Parameter möglich. Beispiele sind allerdings nicht sehr zahlreich. In unserem Beispiel könnte die DNA-Sequenz in der Funktion stehen und dann wäre kein Parameter nötig. dna = "ATGCAT" Dann ist die Funktion nicht sehr flexibel. Oder in der Funktion wird auf eine globale Variable dna zugegriffen, was möglich ist. Nachteil ist, dass die Funktion nicht mehr für sich steht und nur mit dieser Variable im restlichen Programm funktioniert. Verstoß gegen das Prinzip der "Encapsulation". Eine Idee ist auch keinen Rückgabewert auszugeben und gleich einen print()Befehl zu schreiben. Auch dies ist möglich, allerdings ist die Funktion auch wieder nicht sehr flexibel. Wenn ich die Ausgabe anders haben möchte, zum Beispiel in einen Datei schreiben oder einen anderen Text muss eine andere Funktion geschrieben werden. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen Mouse cingulate cortex neurons - Shushruth , Wikimedia Commons Benannte Parameter Wir haben gesehen, dass beim Aufruf der Funktion genau die Reihenfolge der Parameter eingehalten werden muss. In Python können die Parameter benannt werden ("keyword arguments"), dann ist die Reihenfolge gleichgültig. # Funktion, mit benannten Parameter aufrufen get_AT_gehalt(dna="atgcat",rund=3) # diese Funktion geht auch get_AT_gehalt(rund=3, dna="atgcat") Hinweis Dies wird zur besseren Lesbarkeit des Codes eingesetzt. Es können auch nur einzelne Parameter benannt werden. Allerdings, wird der erste Parameter benannt, muss der Rest auch benannt werden. Folgende Fehlermeldung erscheint. Syntax Error: Non-keyword arg after keyword arg # Funktion, mit benannten Parameter # nur erster Parameter benannt, das geht nicht get_AT_gehalt(dna="atgcat", 3) http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen # das geht get_AT_gehalt("atgcat", rund=3) Neuron-matrix - Sevela.p , Wikimedia Commons Voreinstellung von Parameter Für Parameter in Funktionen können Voreinstellungen getroffen werden. Das ist für Parameter nützlich, die von Fall zu Fall angegeben werden sollen. # Funktion, Voreinstellung Parameter def get_AT_gehalt(dna, rund=2): laenge = len(dna) A_zahl = dna.upper().count('A') T_zahl = dna.upper().count('T') AT_gehalt = (A_zahl + T_zahl) / laenge return round(AT_gehalt,rund) AT_gehalt = get_AT_gehalt("atgcat") print("Der AT-Gehalt ist ", AT_gehalt) In dem Beispiel ist rund=2 voreingestellt. Wenn wie in dem Beispiel kein Parameter für die Variable rund angegeben wird, wird der Standardwert 2 genommen. Wird ein Wert angegeben, dann wird dieser Wert genommen. get_AT_gehalt("atgcat,3") http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen Hinweis: Werden zu wenige Parameter beim Aufruf der Funktion angegeben, erscheint eine Fehlermeldung. TypeError: func_AT_gehalt() missing 1 required positional argument: 'rund' Neuronehisto - Tvtb , Wikimedia Commons Datentypen beachten Die Funktion verlangt für die Parameter Werte mit einem bestimmten Datentyp. Darüber hinaus gibt die Funktion einen Wert mit einem bestimmten Datentyp zurück. In dem Beispiel oben ist dna vom Datentyp "string" und rund ist eine "integer"-Zahl. Die Funktion gibt einen "string" zurück. Dies muss beachtet werden, da sonst ein TypeError angezeigt wird. Die eingebauten Funktionen str() und int() verwandeln die Werte in Zeichenketten http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen bzw. in eine ganze Zahl. Die eingebaute Funktion float() wandelt eine Zeichenkette in eine Zahl mit Nachkommastellen. Neuron - Hic et nunc , Wikimedia Commons Funktionen testen - assert Es ist nützlich wenn Funktionen einfach getestet werden können. Die eingebaute Funktion assert() liefert dazu das Werkzeug. Allerdings muss der Rückgabewert einer Funktion bekannt sein. # Funktion testen mit assert def get_AT_gehalt(dna): laenge = len(dna) A_zahl = dna.upper().count('A') T_zahl = dna.upper().count('T') AT_gehalt = (A_zahl + T_zahl) / laenge return (AT_gehalt) assert get_AT_gehalt("atgc") == 0.5 Das testen einer Funktion wird mit assert assert get_AT_gehalt("atgc") == 0.5 eingeleitet. Der erwartete Rückgabewert wird mit 2 Gleichheitszeichen == angegeben. Verläuft der Test positiv und kein Fehler wurde entdeckt, läuft das Programm ohne http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen Bildschirmausgabe durch. Bei Fehler wird ein AssertionError angegeben. Neuron - Actam, Wikimedia Commons Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen Wissenschaftlich Arbeiten mit Computer und Internet Kursübersicht Im Skript suchen Bioinformatik Python Tag 1 1. Einführung 2. Strings 3. Dateien Tag 2 4. Listen,Schleifen 5. Funktionen Bioinformatik Tag 3 Python - Verzweigungen Nach einer Idee und mit Beispielen von Dr. Martin Jones http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists Übungsaufgaben ILIAS Übungsaufgaben Tag 3 6. Verzweigung 7. Reg.Exp. Tag 4 8. Dictionaries 9. System/Input Index Impressum http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen Gebüsch im Scnee- Caspar David Friedrich, Wikimedia Commons In einer Verzweigung wird aufgrund einer Bedingung entschieden, welcher Programmteil ausgeführt werden soll ("conditional statement"). Eine Bedingung kann den Wahrheitswert wahr oder falsch annehmen. # Bedingungen print(10>5) print(1==2) print(len("ATGC")==4) print("ATGCAT".count("T")>1) print("ATGCAT".startswith("ATG")) print("ATGCAT".endswith("CAT")) print("ATGCAT".isupper()) print("ATGCAT".islower()) print("V" in ["V", "A", "Y"]) Die Ausgabe auf dem Bildschirm liefert entweder "True " oder "False ". True und False sind die einzigen Objekte des Datentyps Bool. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen Die Bedingungen werden mit Hilfe von Vergleichsoperatoren erstellt. Arimethische Operator Bedeutung > größer als < kleiner als >= größer als oder gleich <= kleiner als oder gleich == gleich != nicht gleich Logische Operatoren not nicht and und or oder Es kann auch abgefragt werden, ob ein Wert in einer Liste enthalten ist. "V" in ["V", "A", "Y"] Einen Wahrheitswert liefert auch die Frage, ob 2 Objekte gleich sind Objekt1 is Objekt2 . Es gibt Methoden, die ebenfalls den Datentyp True oder False zurückgeben. In den Beispielen oben sind das startswith , endswith , isupper und islower. Nur wenige Bäume ragen durch die Wolkendecke - "Own work", Wikimedia Commons http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen Einfache Verzweigung - if Die einfachste Verzweigung besteht aus einer Bedingung und einer Anweisung, die durchgeführt wird, falls die Bedingung zutrifft. # Einfache Verzweigung at_gehalt = 0.67 if at_gehalt > 0.5: print("Hoher AT-Gehalt (>0.5)") Die Verzweigung beginnt mit einem "header", der mit if gestartet wird. if at_gehalt > 0.5: Es folgt die Bedingung. Hier at_gehalt > 0.5 Wie bei Schleifen und eigenen Funktionen wird der "header" mit einem Doppelpunkt : abgeschlossen. Der Codeblock der Verzweigung ist eingerückt. Auch hier auf einheitliche Einrückung achten. Bei der einfachen Verzweigung stehen im Codeblock die Anweisungen, die durchgeführt werden, wenn die Bedingung zutrifft. Hinweis: Bei der Entwicklung eines Codes ist manchmal der Codeblock noch nicht fertig. Um keine Syntax -Fehler zu produzieren und den restlichen Code zu testen, gibt es pass. pass steht dann stellvertretend für einen möglichen Codeblock nach der if-Bedingung. if Bedingung: pass Stehen Verzweigungen in Schleifen, muss doppelt eingerückt werden. # Einfache Verzweigung in einer Schleife exp_protein = ['chitinase','cyclase','laccase','kinesin'] for prot in exp_protein: if prot.startswith('c'): print(prot) Es wird eine Verzweigung in einer Schleife durchgeführt. Daher muss print(prot) doppelt eingerückt werden, der Codeblock der Verzweigung ist in der 2. Ebene der Einrückung. Python lässt so viele Ebenen zu, wie gewünscht werden. Allerdings ist es bei vielen Einrückungen übersichtlicher, http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen wenn Programmteile eventuell in Funktionen verwandelt werden können. Schwarzes Moor bei Bremen - BogumilaC, Wikimedia Commons Verzweigung mit else In der Verzweigung mit if - else besteht eine alternative Anweisung, falls die Bedingung nicht zutrifft.. # Verzweigung if - else at_gehalt = 0.67 if at_gehalt > 0.5: print("Hoher AT-Gehalt (>0.5)") else: print("Geringer AT-Gehalt (<=0.5)") Die Anweisung else: enthält keine Bedingung. Am Ende ist ein Doppelpunkt : und die Anweisungen danach sind wieder eingerückt. Die Anweisungen nach else werden ausgeführt wenn die Bedingung nicht zutrifft. # Verzweigung if - else, in Datei schreiben datei1 = open("out1.txt","w") datei2 = open("out2.txt","w") exp_protein = ['chitinase','cyclase','laccase','kinesin'] for prot in exp_protein: if prot.startswith('c'): datei1.write(prot + "\n") else: http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen datei2.write(prot + "\n") datei1.close() datei2.close() In dem Beispiel oben werden zwei Dateien geöffnet. In die datei1 wird geschrieben, wenn die Bedingung prot.startswith('c') erfüllt ist. Wenn nicht wird in die andere Datei geschrieben Mainau - Arboretum - Mummelgrummel, Wikimedia Commons Verzweigung mit if - elif Wenn mehr als 2 Verzweigungen geplant sind, muss mit if - else eine weitere Ebene mit if eingezogen werden. # Verzweigung if - else, 3. Verzweigung datei1 = open("out1.txt","w") datei2 = open("out2.txt","w") datei3 = open("out3.txt","w") exp_protein = ['chitinase','cyclase','laccase','kinesin'] for prot in exp_protein: if prot.startswith('c'): datei1.write(prot + "\n") else: if prot.startswith('l'): datei2.write(prot + "\n") else: datei3.write(prot + "\n") http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen datei1.close() datei2.close() datei3.close() Dieses Programm liefert die gewünschten Ergebnisse, aber es wird schon eine 3. Ebene der Einrückung verlangt. Mit elif wird der Code übersichtlicher. # Verzweigung if - elif, 3. Verzweigung datei1 = open("out1.txt","w") datei2 = open("out2.txt","w") datei3 = open("out3.txt","w") exp_protein = ['chitinase','cyclase','laccase','kinesin'] for prot in exp_protein: if prot.startswith('c'): datei1.write(prot + "\n") elif prot.startswith('l'): datei2.write(prot + "\n") else: datei3.write(prot + "\n") datei1.close() datei2.close() datei3.close() Die Anweisung mit else und if werden zu elif zusammengefasst. elif prot.startswith('l'): Jetzt sind nur noch 2 Ebenen der Einrückung notwendig. Abgestorbene Bäume im Dead Vlei in der Namib-Wüste - Desertman, Wikimedia Commons http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen while - Schleife Neben der for-Schleife gibt es noch die while-Schleife. In der Schleife ist eine Bedingung enthalten und wird solange ausgeführt bis die Bedingung nicht mehr zutrifft. # while-Schleife zahl = 0 while zahl<10: print(zahl) zahl = zahl +1 In der Anweisung while zahl<10: ist eine Bedingung enthalten. Solange die Bedingung erfüllt wird, wird der Codeblock ausgeführt. Mit zahl = zahl +1 wird die variable zahl hochgezählt und die Bedingung ist nach dem 10. Durchlauf nicht mehr erfüllt. Daher wird die while-Schleife verlassen. while-Schleifen werden nicht so häufig eingesetzt wie for-Schleifen. Hinweis: Mit der while-Schleife können aus Versehen Endlos-Schleifen erstellt werden. In Windows wird mit Strg + C das Programm daraufhin geschlossen. Innenansicht Stuttgart Airport, Terminal 1 - Der Messer, Wikimedia Commons http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen Bedingungen mit logischen Operatoren Mit logischen Operatoren "and", "or", "not" können komplexe Bedingungen erstellt werden ("boolean Operators"). Folgendes Beispiel wird nur mit einer einfachen Verzweigung durchgeführt. # Bedingungen ohne Logische Operatoren exp_protein = ['chitinase12','cyclase23','laccase1','kinesin3'] for prot in exp_protein: if prot.startswith('c'): if prot.endswith('3'): print(prot) Das Beispiel lässt sich einfacher mit dem "and" Operator gestalten. # Bedingungen mit Logische Operatoren exp_protein = ['chitinase12','cyclase23','laccase1','kinesin3'] for prot in exp_protein: if prot.startswith('c') and prot.endswith('3'): print(prot) Mit der Anweisung if prot.startswith('c') and prot.endswith('3'): entfällt eine Einrückungsebene und er Code ist einfacher zu lesen. Verwende Klammern wenn mehrere logische Operatoren zusammengefügt werden. Beispiele (A and B) or C (A or B) and C A and not B http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen Baumwurzeln und Baumstämme- van Gogh, Wikimedia Commons Funktionen für Verzweigungen Es kann für Verzeigungen auch eine Funktion eingesetzt werden. Allerdings muss dann auch der Rückgabewert der Funktion den logischen Wert "True" oder "False" liefern. # Funktion mit True oder False als Rueckgabe def is_at_rich(dna): laenge = len(dna) A_zahl = dna.count('A') T_zahl = dna.count('T') at_gehalt = (A_zahl + T_zahl) / laenge if at_gehalt > 0.65: return True else: return False Die neue Funktion is_at_rich() gibt den logischen Wert True wieder wenn der AT-Gehalt über 0,65 liegt. Sonst wird der logische Wert False ausgegeben. Mit print(is_at_rich("ATGCATATATGC")) print(is_at_rich("ATGCGCGCACGC")) kann getestet werden. Jetzt kann die Funktion in einer Verzweigung eingesetzt werden. # Funktion in Verzweigung if is_at_rich(dna): # codeblock pass Die Funktion mit True oder False Ausgabewert kann noch knapper und klarer geschrieben werden. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08] ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen # Funktion mit True oder False als Rueckgabe, verbessert def is_at_rich(dna): laenge = len(dna) A_zahl = dna.count('A') T_zahl = dna.count('T') at_gehalt = (A_zahl + T_zahl) / laenge return at_gehalt > 0.65 Die Anweisung return at_gehalt > 0.65 gibt True aus falls die Aussage zutrifft und False falls nicht. Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke Wissenschaftlich Arbeiten mit Computer und Internet Kursübersicht Im Skript suchen Bioinformatik Python Tag 1 1. Einführung 2. Strings 3. Dateien Tag 2 4. Listen,Schleifen 5. Funktionen Tag 3 6. Verzweigung 7. Reg.Exp. Bioinformatik Tag 3 Python - Reguläre Ausdrücke Nach einer Idee und mit Beispielen von Dr. Martin Jones http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists/ Übungsaufgaben ILIAS Übungsaufgaben Ein guter Überblick über "Regular expression operation in Python3" findet sich hier. Um Reguläre Ausdrücke zu testen, kann Regex101 online verwendet werden. Tag 4 8. Dictionaries 9. System/Input Index Impressum Diaethria anna - Charlesjsharp, Wikimedia Commons http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke Biologie suchen in der Natur nach Mustern. Mit Python kann sehr effektiv in einer Zeichenkette nach Muster (patterns in string) gesucht werden. Beispiele um in DNA, RNA und Proteinsequenzen, nach bestimmten Sequenzen zu suchen.. Schnittstellen für Restriktionsenzyme Bindungsstellen für DNA Transkriptionsfaktoren Proteindomänen PCR Primer Weitere Einsatzbereiche für Suche nach Mustern sind: BLAST Suche Suche nach Gennamen, taxonomische Namen Gene accession number In dem Kapitel "Strings" haben wir bereits Möglichkeiten gesehen nach einzelnen Buchstaben in einem String zu suchen. Das reicht bei weitem nicht aus, alle Aufgaben in diese Richtung zu lösen. Daher wurde das Modul Reguläre Ausdrücke ("regular expression" kurz "regex") in Python eingeführt. Reguläre Ausdrücke sind universell und werden auch in anderen Programmiersprachen und Kommandozeilenprogramme (siehe Linux grep Info oder Windows findstr Info) eingesetzt. Reguläre Ausdrücke sind auf Anhieb nicht leicht zu verstehen, aber durch deren universellen Einsatz lohnt sich eine Beschäftigung damit. http://en.wikipedia.org/wiki/Regular_expression#Examples http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke " Caterpillar of the Old World Swallowtail " - Archaeodontosaurus, Wikimedia Commons Module Mit Module werden Funktionen, Variablen und anderes zusammengefasst. Es gibt eingebaute Module und Module, die zu Python zugefügt werden müssen. Da diese Module nicht immer gebraucht werden, ist es besser sie bei Bedarf aufzurufen. Das Modul wird mit import Modul in den Code eingebunden. Beispiel für Module ist time für Zeitfunktionen. import time print(time.asctime()) Gibt die aktuelle Zeit mit Datum aus. Das Modul sys für System greift auf Systembefehle zu. import sys print(sys.stdin.readline()) Die Standardeingabe und Funktion readline() liest eine Zeile Text ein, die über die Tastatur eingegeben wurde. Die Eingabe wird mit der Enter-Taste abgeschlossen. Im Beispiel oben wird diese Eingabe mit print() ausgegeben. Modul tkinter zur Erzeugung von Oberflächenelementen. Damit können zum Beispiel Fenster, Buttons oder Grafiken erzeugt werden. Einführung in tkinter. Oder sogar für Computerspiele pygames.... http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke "10.000 Meisterwerke der Kunst" - Carl Spitzweg , Wikimedia Commons Modul re Das Modul für reguläre Ausdrücke heißt re. Soll das Modul benutzt werden muss die folgende Zeile eingefügt werden. import re Wenn eine Funktion aus dem Modul genutzt werden soll, muss das mit dem Modulnamen angesprochen werden. Für die search Funktion sieht das folgendermaßen aus: re.search(muster, zeichenkette) Ohne vorher das Modul zu importieren, wird ein "NameError" ausgegeben. NameError: name 're' is not defined. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke Raw strings Mit einem Backslash können innerhalb einer Zeichenkette spezielle Buchstaben für Steuerbefehle maskiert werden. Zum Beispiel ist "\n" der Befehl für eine neue Zeile. Leider kollidiert das in regulären Ausdrücken mit anderen Befehlen. Daher wurde der "raw string" eingeführt. Wird vor der Zeichenkette ein kleines r gesetzt, ist die normale Maskierung mit "\" außer Kraft gesetzt. print(r"\n\t") Es wird tatsächlich "\n\t" ausgegeben und nicht eine neue Zeile mit einem zusätzlichen Tab eingefügt. Kleiner Fuchs - Vulkan , Wikimedia Commons Suche nach Mustern Die einfachste Funktion der regulären Ausdrücke ist re.search(). Die Funktion gibt True zurück wenn der Ausdruck gefunden wird. Der erste Parameter ist der Suchstring und der zweite Parameter ist die Zeichenkette in der gesucht wird. # Reguläre Ausdruecke, re.search, EcoRI import re dna = "ATCGAGTGAATTCAGCACGTCG" http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke if re.search(r"GAATTC",dna): print("Schnittstelle gefunden") Gesucht wird nach der Schnittstelle von EcoRI. re.search(r"GAATTC",dna) Wird die Schnittstelle gefunden wird der Text ausgegeben. Das ist jetzt noch nicht so überwältigend, regex kann mehr... Schmetterling im Flug - Charlesjsharp , Wikimedia Commons Alternativen ("Alternation") - Pipe Zeichen | Das Beispiel oben ist sehr einfach gehalten. Das Restrinktionsenzym AvaII schneidet aber an 2 Stellen: GGACC und GGTCC. Das kann mit einem logischen Operator or gelöst werden. # Regulaere Ausdruecke, re.searchm AvaII import re dna = "AGGTCCTGAATTCAGCACGTCG" if re.search(r"GGACC",dna) or re.search(r"GGTCC",dna): print("Schnittstelle gefunden") Das geht eleganter mit einem regulären Ausdruck. re.search(r"GG(A|T)CC",dna) # Regulaere Ausdruecke, re.searchm AvaII, mit pipe import re http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke dna = "AGGTCCTGAATTCAGCACGTCG" if re.search(r"GG(A|T)CC",dna): print("Schnittstelle gefunden") Mit dem Pipe-Symbol | in einer Klammer werden alternative Ausdrücke angegeben. (A|T) bedeutet, es geht sowohl A als auch T. Colias croceus - Charlesjsharp , Wikimedia Commons Eckige Klammer ("Charakter Groups") - [xy] Es gibt Restriktionsenzyme, die lassen an einer Stelle alle Basen zu. Ein Beispiel ist BisI. Das Enzym schneidet bei GCNGC. Wobei N irgendeine Base bedeutet. # Regulaere Ausdruecke, re.search BisI, mit Pipe import re dna = "AGGTGCTGCATTCAGCACGTCG" if re.search(r"GC(A|T|G|C)GC",dna): print("Schnittstelle gefunden") Der Ausdruck re.search(r"GC(A|T|G|C)GC",dna) lässt sich einfacher schreiben. Es wird eine eckige Klammer eingeführt. # Regulaere Ausdruecke, re.search BisI, mit [ ] import re dna = "AGGTGCTGCATTCAGCACGTCG" if re.search(r"GC[ATGC]GC",dna): http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke print("Schnittstelle gefunden") Der Ausdruck [ATGC] bedeutet A, T, G oder C. "Green-veined white pieris napi" - Charlesjsharp , Wikimedia Commons Beliebiges Zeichen - Punkt - "." Das Zeichen oben könnte auch mit GC.GC geschrieben werden. Der Punkt bedeutet "beliebiges Zeichen". Allerdings ist damit jedes Zeichen gemeint. Es würde auch zum Beispiel GC2GC gehen, was bestimmt falsch wäre. Logische Verneinung - " ^" Wenn ein Zeichen nicht gemeint ist, kann ein Dach-Symbol ^ davor gestellt werden. Wird ^ vor den Zeichen in einer eckigen Klammer gesetzt, so sind alle Buchstaben in der Klammer ausgeschlossen. GC[^ATG]GC bedeutet, dass nur GCCGC gefunden wird. Nicht GCAGC Nicht GCTGC Nicht GCGGC (Nicht so perfekt, außer A, T und G geht jedes beliebige Zeichen!) Anzahl der Zeichen und Wiederholungen ("Quantifier") - ? + * und { } http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke Manchmal werden nach wiederholten Zeichen gesucht. Ein Fragezeichen ? nach einem Zeichen bedeutet, dass dieses Zeichen optional ist. In GCT?GC ist T optional. GCGC und GCTGC werden gefunden. Gilt das für mehrere Zeichen, werden diese Zeichen in Klammer gesetzt. Bei GC(AAA)?GC ist GCGC und GCAAAGC korrekt. Ein Plus-Zeichen + nach einem Zeichen oder einer Gruppe bedeutet, dass diese Zeichen vorhanden sein müssen, aber beliebig oft wiederholt werden können. GCA+GC bedeutet, dass GCAGC geht GCAAGC geht GCAAAGC geht usw. GCGC geht nicht. Sternchen * dagegen bedeutet, dass das Zeichen oder die Gruppe davor optional sind. Es gehen aber auch beliebig viele Zeichen. GCA*GC bedeutet, dass GCAGC geht GCAAGC geht GCAAAGC geht usw. GCGC geht auch GCXGC nicht geht. Sollen eine bestimmte Anzahl an Wiederholungen beschrieben werden, kann eine geschweifte Klammer { } eingesetzt werden. GCA{5}GC bedeutet, dass GCAAAAAGC geht GCAAAAGC geht nicht. Mit geschweifter Klammer kann auch der Bereich der Wiederholungen angegeben werden. GCA{2,4}GC bedeutet, dass 2 bis 4 Wiederholungen von A gehen. GCAGC geht nicht GCAAGC geht GCAAAGC geht. GCAAAAGC geht GCAAAAAGC geht nicht. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke "Butterfly sikkim" - Incomposition , Wikimedia Commons Positionen , ^ und $ Das Dachsymbol ^ bezeichnet den Start einer Zeichenkette und das DollarSymbol $ das Ende. ^AAA bedeutet AAAGCGC geht GCAAAGC geht nicht. AAA$ bedeutet GCGCAAA geht AAAGcgC geht nicht. Eine aus allen Zahlen - \d Soll eine Zahl aus allen möglichen Zahlen gefunden werden, gibt es ein Sonderzeichen - \d Statt [1234567890] kann \d geschrieben werden. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke Dirce Beauty Colobura dirce - Julia W , Wikimedia Commons Kombinationen von Ausdrücken Die oben vorgestellten Zeichen können kombiniert werden. Das macht reguläre Ausdrücke so mächtig. ^ATG[ATGC]{30,1000}A{5,10}$ Dieser Ausdruck sieht verwirrend aus, bedeutet nach dem bisher gesagten: - ATG muss am Anfang der Sequenz stehen - dann folgen 30 bis 1000 Basenpaare die aus A, T, C oder G bestehen. - am Ende steht ein Poly-A- Schwanz, der 5 bis 10 Basen lang ist. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke Hinweis: Neben re.search() gibt es noch re.match() . re.search()sucht ein Muster innerhalb einer Zeichenkette. Dagegen findet re.match() einen Treffer nur wenn die Zeichenkette am Anfang übereinstimmt. Nähere Informationen. Aurorafalter - Armin Kübelbeck , Wikimedia Commons Gesuchte Zeichenkette ausgeben - group() Bei regulären Ausdrücken interessiert nicht nur, ob ein bestimmtes Muster gefunden wurde, sondern auch die gefundene Zeichenkette. Das können auch mehrere sein. Dazu wird die Methode group() eingesetzt. Die Funktion search() gibt ein "Match-Objekt" zurück, das mit der Methode group() weiter untersucht werden kann. Das Match-Objekt enthält den gefunden String. # Regulaere Ausdruecke, search() und group() import re dna = "ATGACGTACGTACGACTG" m = re.search(r"GA[ATGC]{3}AC",dna) print(m.group()) http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke Es wird nach der Sequenz GA, gefolgt von 3 Basen und AC gesucht. m = re.search(r"GA[ATGC]{3}AC",dna) Vom Programm wird GACGTAC ausgegeben. Die Methode re.search() liefert ein Match-Objekt zurück, das mit m.group() untersucht werden kann. Wenn mehrere Teilergebnisse ausgegeben werden sollen, kann der Ausdruck in Klammern gesetzt werden. Wir suchen nach GA[ATGC]{3}AC[ATGC]{2}AC Die Sequenz GA, es folgen 3 Basen, dann AC und weiteren 2 Basen und schließlich AC. Es interessieren uns zwei Bereiche, die in runden Klammern gesetzt werden.. GA([ATGC]{3})AC([ATGC]{2})AC Diese Teilergebnisse werden mit der Methoden group(1) und group(2) angesprochen. # Regulaere Ausdruecke, search() und group(1) und group(2) import re dna = "ATGACGTACGTACGACTG" m = re.search(r"GA([ATGC]{3})AC([ATGC]{2})AC",dna) print("Der ganze Bereich: " + m.group()) print("Der erste Bereich: " + m.group(1)) print("Der zweite Bereich: " + m.group(2)) Die Teilbereiche werden in runden Klammern angegeben GA([ATGC]{3})AC([ATGC]{2})AC Der erste Teibereich wird mit m.group(1) m.group(2) angesprochen, der zweite Bereich mit Es wird folgendes ausgegeben: Der ganze Bereich: GACGTACGTAC Der erste Bereich: CGT Der zweite Bereich: GT http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke Zitronenfalter - Schizoschaf , Wikimedia Commons Die Postion des Treffers ausgeben Das Match-Objekt von re.search() enthält auch die Information über die Position des Treffers. Die Methoden start() und end() geben den Anfang und das Ende des Treffers in der Sequenz an. # Regulaere Ausdruecke, search() und start() und end() import re dna = "ATGACGTACGTACGACTG" m = re.search(r"GA([ATGC]{3})AC([ATGC]{2})AC",dna) print("Treffer: " + m.group()) print("Start: ", m.start()) print("Ende: ", m.end()) Es wird für den Start 2 und für das Ende 13 ausgegeben. Es wird wieder mit 0 angefangen. 1. Base hat den Index 0. Daher ist 2 die 3. Base. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke Da start() und end() den Datentyp Zahlen ausgeben, muss das Ergebnis mit str() oder wie hier durch ein Komma getrennt ausgegeben werden. print("Start: ", m.start()) Auch hier kann die Nummer der Teilbereiche, die durch runde Klammern gesetzt wurden angegeben werden. # Regulaere Ausdruecke, search() und start(1) und end(1) import re dna = "ATGACGTACGTACGACTG" m = re.search(r"GA([ATGC]{3})AC([ATGC]{2})AC",dna) print("Treffer gesamt: " + m.group()) print("Der erste Bereich: " + m.group(1)) print("Start erster Bereich: ", m.start(1)) print("Ende erster Bereich: ", m.end(1)) print("Der zweite Bereich: " + m.group(2)) print("Start zweiter Bereich: ", m.start(2)) print("Ende zweiter Bereich: ", m.end(2)) Die Teilbereiche werden in runden Klammern angegeben GA([ATGC]{3})AC([ATGC]{2})AC Die Startposition der ersten Bereichs wird mit m.start(1) angesprochen. Für end() und den zweiten Bereich entsprechend. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke Schwalbenschwanz - Werner Pichler , Wikimedia Commons Zeichenkette in Liste mit regulären Ausdrücken - re.split() Reguläre Ausdrücke können auch dafür eingesetzt werden, Zeichenketten mit Trennzeichen in eine Liste zu überführen. Das Modul re besitzt eine eigene Methode re.split() . Der erste Parameter ist der reguläre Ausdruck, er gibt das Trennzeichen an. Der zweite Parameter ist die Zeichenkette, die in eine Liste aufgespalten werden soll. # Regulaere Ausdruecke, split() import re dna = "ACTNGCATRGCTACGTYACGATSCGAWTCG" runs = re.split(r"[^ATGC]", dna) print(runs) http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke [ ^ATGC ] bedeutet, ^ - logische Verneinung, alle Zeichen außer A, T, G oder C. In dem Beispiel ist eine DNA Sequenz ("consensus DNA"), die außer den Basen ATGC noch Stellen mit unbestimmten Basen N, R, Y, W. ("ambiguity codes") enthält. N - A,T,C oder G R - A oder G Y - C oder T W - A oder T http://en.wikipedia.org/wiki/Nucleic_acid_notation Der Code zwischen den unbestimmten Basen soll in einer Liste ausgegeben werden. Die unbestimmten Basen werden als Trennzeichen mit einem regulären Ausdruck bestimmt Plate VI from Europas bekannteste Schmetterlinge - Dr. F. Nemos , Wikimedia Commons http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke Mehrere Treffer bestimmen- re.findall() und re.finditer() Bis jetzt hatten wir in unseren Beispielen nur einen Treffer in einer Sequenz bestimmt. Viel häufiger wird das gesuchte Muster mehr als einmal in einer Sequenz gefunden. Die Funktion re.findall() gibt alle gefundenen Treffer in einer Liste aus. # Regulaere Ausdruecke, re.findall() import re dna = "ATGATATAAACGTAATATATATATAAACGTACGACTG" runs = re.findall(r"[AT]{4,100}",dna) print(runs) Gesucht werden Treffer mit entweder A oder T, ab einer Länge von 4 bis 100 Basen. Das Ergebnis ist kein Match-Objekt wie bei search() sondern ein Listen-Objekt, das keine weiteren Informationen zum Beispiel für die Positionen enthält. Sollen Informationen über die Position ausgegeben werden, ist die Methode re.finditer() besser geeignet. # Regulaere Ausdruecke, re.finditer() import re dna = "ATGATATAAACGTAATATATATATAAACGTACGACTG" runs = re.finditer(r"[AT]{4,100}",dna) for match in runs: run_start = match.start() run_end = match.end() print("AT reicht von ", run_start, " bis ", run_end) Die Methode re.finditer() gibt ein Objekt aus, das sich mit einer for-Schleife abfragen lässt. Es ist ein Iterator Object , also Iteration, daher finditer(). Das Objekt enthält die Start- und End-Positionen, die mit den Methoden start() und end() abgefragt werden. Die gefundenen Sequenzen lassen sich mit den Start und Endpositionen ermitteln. sequenz = dna[run_start : run_end] Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10] ZMBP - Computer- Bioinformatik - Python - Dictionaries Wissenschaftlich Arbeiten mit Computer und Internet Kursübersicht Im Skript suchen Bioinformatik Python Tag 1 1. Einführung 2. Strings 3. Dateien Tag 2 4. Listen,Schleifen 5. Funktionen Bioinformatik Tag 4 Python - Dictionaries Nach einer Idee und mit Beispielen von Dr. Martin Jones http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists/ Übungsaufgaben ILIAS Übungsaufgaben Tag 3 6. Verzweigung 7. Reg.Exp. Tag 4 8. Dictionaries 9. System/Input Index Impressum Unibibliothek Tübingen, Lesesaal - Universität Tübingen Webseite Wir haben bereits Listen kennengelernt in denen Elemente abgelegt werden. Listen werden mit eckigen Klammern [ ]erstellt. Die Elemente können mit einem Index angesprochen werden. Der Index ist fest von 0 für das erste Element, 1 für das zweite und so weiter. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11] ZMBP - Computer- Bioinformatik - Python - Dictionaries In Python gibt es noch Tupel, die sich wesentlichen von Listen dadurch unterscheiden, dass sie nicht verändert werden können. Tubel werden in runden Klammer ( ) eingeschlossen. In diesem Kurs werden Tupel nicht weiter behandelt. Einführung in Tupel siehe The Python Standard Library Ein weiterer wichtiger Dateityp ist Dictionary, der die Idee der Listen durch einen zweiten Wert erweitert. Statt einem festen Index, wie in der Liste, kann ein Schlüssel ("Key") eingegeben werden, der einem Wert ("Value") zugeordnet wird. Ein guter Vergleich ist ein Wörterbuch ("Dictionary"). Ein bestimmter Begriff ist einer Definition zugeordnet. In der Biologie werden Dictionaries häufig eingesetzt. Genname und die dazu gehörige DNA-Sequenz Proteinsequenzname und dazu gehörige Sequenz DNA Restriktionsenzyme und ihre Schnittstellen ("motifs") DNA Codon und dazu gehörige Aminosäuren Probe und die dazu gehörenden Daten Immer haben wir einen Key und einen dazu gehörenden Value. Steacie Science and Engineering Library at York University - Raysonho, Wikimedia Commons http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11] ZMBP - Computer- Bioinformatik - Python - Dictionaries Dictionary erzeugen Die Syntax eines Dictionarys ist ähnlich wie bei einer Liste. Allerdings werden geschweiften Klammern { } gesetzt. Die Elemente ("Item") bestehen aus Key und Value, die durch einen Doppelpunkt getrennt werden. Die Elemente sind durch Komma getrennt. Als Keys kommen Zeichenketten und Zahlen in Frage. Values können jeden Datentyp annehmen. Und wie immer sollen Zeichenketten durch Anführungszeichen kenntlich gemacht werden. Keys müssen einzigartig sein. Bei zwei gleichen Keys gibt es keine korrekte Abfrage. # Dictionary enzyme={'EcoRI':'GAATTC', 'AvaII':'GG(A|T)CC', 'BisI':'GC[ATGC]GC' } print(enzyme) Eine andere Schreibweise ist lesbarer. # Dictionary, anders geschrieben enzyme={ 'EcoRI':'GAATTC', 'AvaII':'GG(A|T)CC', 'BisI':'GC[ATGC]GC' } print(enzyme) Der Code ist nun klarer, Key und Value jeweils in einer Zeile. Der Code wird trotzdem normal ausgeführt. Hinweis: Einrückung hier nicht notwendig. IDLE macht nach der ersten geschweiften Klammer automatisch eine Einrückung. Das sieht schöner aus. Es kann ausnahmsweise beliebig eingerückt werden. Durch die geschweifte Klammer ist das eindeutig. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11] ZMBP - Computer- Bioinformatik - Python - Dictionaries Der Wert der einzelnen Elemente kann mit dem Key in einer eckigen Klammer aufgerufen werden. print(enzyme['BisI']) Bei Zeichenketten das Anführungszeichen nicht vergessen. Vergleiche die Syntax bei Listen, anstatt dem Index wird der Key angegeben. San Diego City College Learing Recource City - Arbeiterreserve, Wikimedia Commons Elemente hinzufügen In der Praxis wird häufig ein Dictionary durch Hinzufügen der Elemente gebildet. Der Code startet mit einem leeren Dictionary. Das Dictionary wird gefüllt, indem jedem Key ein Value zugewiesen wird. # Dictionary, Elemente hinzufügen enzyme={} enzyme['EcoRI'] = 'GAATTC' enzyme['AvaII'] = 'GG(A|T)CC' enzyme['BisI'] = 'GC[ATGC]GC' print(enzyme) http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11] ZMBP - Computer- Bioinformatik - Python - Dictionaries Elemente löschen Elemente werden mit pop() gelöscht. # Dictionary, Elemente loeschen enzyme={ 'EcoRI':'GAATTC', 'AvaII':'GG(A|T)CC', 'BisI':'GC[ATGC]GC' } print(enzyme) enzyme.pop('EcoRI') print(enzyme) Das Element wird mit der Anweisung enzyme.pop('EcoRI') gelöscht. Städtische Bibliotheken Dresden Ecke Prager Straße - Rechnerpool - Conny, Wikimedia Commons Beispiel: Zählen der Trinukleotide in einer http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11] ZMBP - Computer- Bioinformatik - Python - Dictionaries Sequenz Dictionaries lassen sich wunderbar dafür einsetzen das Vorkommen der Trinukleotide in einer Sequenz zu zählen. Allgemein kommt diese Aufgabe in der Bioinformatik sehr häufig vor. Es wird von "Count kmers" gesprochen, wenn statt Trinukleotide eine Anzahl k Nukleotide betrachtet werden. # Dictionary, Trinukleotide zaehlen dna = "AATGATCGATCGTACGCTGA" dic_counts = {} for base1 in ['A','T','G','C']: for base2 in ['A','T','G','C']: for base3 in ['A','T','G','C']: trinukleotid = base1 + base2 + base3 zahl = dna.count(trinukleotid) dic_counts[trinukleotid] = zahl print(dic_counts) 3 Schleifen mit for base1 in ['A','T','G','C']: sorgen dafür, dass jede Kombination von A,T,G und C durchlaufen wird. trinukleotid = base1 + base2 + base3 stellt die Kombination aus den Basen vor. Das wird der Schlüssel im Dictionary. Die Häufigkeit des Vorkommens in der Sequenz wird mit zahl = dna.count(trinukleotid) ermittelt. Das wird der Value des Dictionarys. Das Dictionary wird mit dic_counts[trinukleotid] = zahl aufgefüllt. Die Zahl des Vorkommens eines bestimmten Trinukleotids kann einfach mit print(dic_counts['TGA']) ermittelt werden. Es werden insgesamt 4 x 4 x 4 = 64 Elemente in das Dictionary dic_counts aufgenommen. Die meisten haben den Wert 0. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11] ZMBP - Computer- Bioinformatik - Python - Dictionaries Mit einer Verzweigung können die Elemente mit dem Wert 0 herausgefischt werden. # Dictionary, Trinukleotide zaehlen, ohne Wert=0 dna = "AATGATCGATCGTACGCTGA" dic_counts = {} for base1 in ['A','T','G','C']: for base2 in ['A','T','G','C']: for base3 in ['A','T','G','C']: trinukleotid = base1 + base2 + base3 zahl = dna.count(trinukleotid) if zahl > 0: dic_counts[trinukleotid] = zahl print(dic_counts) Jetzt werden nur noch die Trinukleotide ausgegeben die öfter als 0 vorkommen. get-Methode Wenn jetzt allerdings nach einem Value gesucht wird der 0 ist , wird ein KeyError Fehler ausgegeben. print(dic_counts['AAA']) Um das zu lösen, kann mit einer Verzweigung gearbeitet werden. if 'AAA' in dic_counts: print(dic_counts['AAA']) Es wird nichts ausgegeben, da 'AAA' im Dictionary nicht enthalten ist, die Fehlermeldung erscheint nicht mehr. Besser ist es, mit der get() Methode zu arbeiten. get() lässt 2 Parameter zu. Der 1. Parameter ist der Schlüssel. Der 2. Parameter ist für den Standardwert, wenn das Element nicht in der Liste ist. Wenn daher der 2. Parameter 0 ist, wird für jedes Element das nicht gefunden wird 0 ausgegeben. Eine Fehlermeldung erscheint nicht. print(dic_counts.get('AAA',0)) Nun wird 0 ausgegeben, da 'AAA' im Dictionary nicht enthalten ist. Mit diesem Wert 0 und einer Verzweigung, könnte wieder eine Meldung erstellt werden. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11] ZMBP - Computer- Bioinformatik - Python - Dictionaries The subject catalogue ("Schlagwortkatalog") of the University Library of Graz Dr. Marcus Gossler, Wikimedia Commons Iteration über eine Dictionary Wenn mehrere Elemente aus einem Dictionary angesprochen werden sollen, kann das auch mit der get() Methode gelöst werden. # Dictionary, mehrere Elemente mit get() dna = "AATGATCGATCGTACGCTGA" dic_counts = {} for base1 in ['A','T','G','C']: for base2 in ['A','T','G','C']: for base3 in ['A','T','G','C']: trinukleotid = base1 + base2 + base3 zahl = dna.count(trinukleotid) dic_counts[trinukleotid] = zahl if dic_counts.get(trinukleotid,0) == 2: print(trinukleotid) Es werden die 4 Trinukleotide ausgegeben, die einen Value = 2 haben. Allerdings wird für die Abfrage die Sequenz als Ganzes abgefragt. Das kann bei großen Sequenzen jedesmal sehr lange dauern. Daher wird hier besser die key() Methode eingesetzt. Iteration über Keys - keys() http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11] ZMBP - Computer- Bioinformatik - Python - Dictionaries Die Methode keys() gibt eine Liste der Schlüssel eines Dictionary aus. print(dic_counts.keys()) Die Anweisung gibt in dem obigen Beispiel alle Schlüssel aus. Das kann mit einer for-Schleife eingesetzt werden, um Elemente zu suchen, dessen Wert gleich 2 ist. for trinukleotid in dic_counts.keys(): if dic_counts.get(trinukleotid)==2: print(trinukleotid) Hier zur Vollständigkeit der gesamte Code: # Dictionary, keys() Methode dna = "AATGATCGATCGTACGCTGA" dic_counts = {} for base1 in ['A','T','G','C']: for base2 in ['A','T','G','C']: for base3 in ['A','T','G','C']: trinukleotid = base1 + base2 + base3 zahl = dna.count(trinukleotid) dic_counts[trinukleotid] = zahl for trinukleotid in dic_counts.keys(): if dic_counts.get(trinukleotid)==2: print(trinukleotid) Es werden die 4 Nukleotide ausgegeben, die einen Wert von 2 haben. Die Reihenfolge der Nukleotide, die ausgegeben werden, ist anders als in dem obigen Beispiel. Anders als bei Listen, die immer in der eingegeben Reihenfolge erscheinen, ist bei Dictionaries die Reihenfolge nicht bestimmt. Es besteht die Möglichkeit mit der Funktion sorted() die Liste der Schlüssel zu sortieren. for trinukleotid in sorted(dic_counts.keys()): if dic_counts.get(trinukleotid)==2: print(trinukleotid) Nun werden die Trinukleotide in nummerisch-alphabetischer Reihenfolge dargestellt. sorted(dic_counts.keys()) http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11] ZMBP - Computer- Bioinformatik - Python - Dictionaries Iteration über die Elemente - items() Die Suche in einem Dictionary nach einem Schlüssel für einen bestimmten Wert wird in Python so häufig eingesetzt, dass es dafür eine Verkürzung gibt. Wir haben oben schematisch geschrieben: for schluessel in my_dict.keys(): wert = my_dict.get(schluessel) #mache etwas mit wert und schluesssel Mit der items() Methode sieht das so aus: for schluessel, wert in my_dict.items(): #mache etwas mit wert und schluesssel Da die items() Methode 2 Werte ausgibt, brauchen wir daher in dieser for-Schleife 2 Werte: schluessel und wert . In dem Beispiel oben sieht das folgendermaßen aus. for schluessel, wert in dic_counts.items(): if wert == 2: print(schluessel) Es wird in einer for-Schleife die Elemente ausgegeben. Es müssen 2 Variablen angegeben werden. Für den Schlüssel schluessel und den Wert wert jeweils eine. for schluessel,wert in dic_counts.items(): Wieder der gesamte Code: # Dictionary, keys() Methode dna = "AATGATCGATCGTACGCTGA" dic_counts = {} for base1 in ['A','T','G','C']: for base2 in ['A','T','G','C']: for base3 in ['A','T','G','C']: trinukleotid = base1 + base2 + base3 zahl = dna.count(trinukleotid) dic_counts[trinukleotid] = zahl for schluessel,wert in dic_counts.items(): http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11] ZMBP - Computer- Bioinformatik - Python - Dictionaries if wert == 2: print(schluessel) Die Methode items() hat einen klareren Aufbau und wird daher in Phyton gerne eingesetzt. Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11] ZMBP - Computer- Bioinformatik - Python - Input Wissenschaftlich Arbeiten mit Computer und Internet Kursübersicht Im Skript suchen Bioinformatik Python Tag 1 1. Einführung 2. Strings 3. Dateien Tag 2 4. Listen,Schleifen 5. Funktionen Bioinformatik Tag 4 Python - System, Input, formatierte Ausgabe Nach einer Idee und mit Beispielen von Dr. Martin Jones http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists/ Übungsaufgaben ILIAS Übungsaufgaben Tag 3 6. Verzweigung 7. Reg.Exp. Tag 4 8. Dictionaries 9. System/Input Index Impressum Card puncher - NARA - 513295 - Tony Wills, Wikimedia Commons Mit Python können Dateien in einem Betriebssystem kopiert, verschoben, umbenannt oder gelöscht werden. Es muss berücksichtigt werden, dass Python auf unterschiedlichen Computerhttp://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12] ZMBP - Computer- Bioinformatik - Python - Input Betriebssystemen laufen kann. Windows, Linux und Apple MacOS. Diese Betriebssysteme zeigen eine unterschiedliche Ordner- und Dateiverwaltung. Python stellt dafür die entsprechenden Module bereit. Es sind OS ("Operating System") und shutil ("SHell UTILities"). IBM Electronic Data Processing Machine5 - NASA, Wikimedia Commons Dateien und Ordner verwalten Dateien umbenennen - os.rename() Eine bestehende Datei soll umbenannt werden. #Datei umbenennen import os os.rename("old.txt", "new.txt") Zuerst muss das Modul os mit import os aufgerufen werden. Jetzt steht die Funktion os.rename() aus dem Modul os zum Umbenennen der Datei zur Verfügung. os.rename("old.txt", "new.txt") Die Funktion os.rename() nimmt 2 Parameter auf. Der erste ist der alte Dateiname und der zweite ist der neue Dateiname. Hinweise: http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12] ZMBP - Computer- Bioinformatik - Python - Input Das Beispiel geht davon aus, dass sich sowohl das Python Programm, als auch dei Datei zum Umbenennen in dem gleichen Ordner befinden. Wenn nicht, muss der entsprechende Pfadname angegeben werden. Der Pfad unterscheidet sich bei Windows, Linux oder Mac Betriebssystemen. Außerdem müssen auch die Zugriffrechte zum ändern der Datei bestehen. Datei bewegen - os.rename() Wird in der Funktion os.rename() als 2. Parameter ein anderer Ordner angegeben, wird die Datei in den 2. Ordner bewegt. #Datei bewegen, Windows import os os.rename("test1\\old.txt", "test2\\old.txt") Die Datei old.txt wird aus dem Ordner test1 in den Ordner test2 bewegt. In dem Ordner test1 ist keine Datei old.txt mehr vorhanden. Bemerkung Hier wird ein relativer Pfad benutzt. In dem Programmordner, liegen 2 Ordner test1 und test2. os.rename("test1\\old.txt", "test2\\new.txt") Die Datei wird gleichzeitig bewegt und umbenannt. 2 Backslash ( \\) weil eins als Escape-Zeichen verwendet wird. Alternativ würde auch raw-String r gehen os.rename(r"test1\old.txt", r"test2\new.txt") Ordner umbenennen Mit os.rename() kann auch ein Ordner umbenannt werden. #Ordner umbenennen, Windows import os os.rename("ordner_alt", "ordner_neu") Einen neue Ordner erstellen - os.mkdir() http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12] ZMBP - Computer- Bioinformatik - Python - Input Die Funktion os.mkdir() erstellt einen neuen Ordner #Ordner erstellen, Windows import os os.mkdir("ordner1") Mit os.mkdir("ordner1") wird ein neuer Ordner ordner1 angelegt. Mehrere neue Ordner erstellen - os.makedirs() Es können mehrere Ordner mit os.makedirs() erstellt werden (Windowsversion). #mehrere Ordner erstellen, Windows import os os.makedirs("ordner1\\ordner2\\ordner3") Es wird ein Ordner ordner1 im gleichen Verzeichnis erstellt. In dem ordner1 wird gleichzeitig ein ordner2 erstellt. Und in dem ordner2 ein ordner3 Datei oder Ordner kopieren - shutil.copy Die Funktion shutil.copy() aus dem Modul shutil kann eine Datei oder einen Ordner kopieren. #Datei kopieren, Windows import os, shutil shutil.copy("original.txt", "kopie.txt") Die Methode shutil.copy() kopiert die Datei original.txt nach kopie.txt Hinweis: Es gibt noch eine weitere Funktion shutil.copytree(), die auch Dateien und Ordner in einem ganzen Baum kopiert. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12] ZMBP - Computer- Bioinformatik - Python - Input Prüfen, ob Datei existiert - os.path.exists() Oft ist es wichtig, vorher zu testen, ob eine Datei mit diesem Pfad überhaupt existiert. Das kann eine Funktion aus dem Modul os, os.path.exists(). #Datei kopieren, Windows import os if os.path.exists("original.txt"): print("Datei ist vorhanden") Hinweis: Es kann auch geprüft werden, ob bereits ein Ordner im aktuellen Verzeichnis ist. Dazu folgenden Befehl verwenden: os.path.isdir("Ordnername") Dateien und Ordner löschen - os.remove, os.rmdir, shutil.rmtree Um eine Datei oder einen leeren Ordner zu löschen wird os.remove verwendet. #Datei loeschen, Windows import os os.remove("test.txt") Es kann mit os.rmdir("Ordner1") auch ein Ordner gelöscht werden. Allerdings muss auch hier der Ordner leer sein. Ordner mit Inhalt werden mit shutil.rmtree("Ordner1") samt Inhalt gelöscht. Hinweis: Achtung bei Windows, Probleme mit Zugriffsrechte List mit Dateien und Ordnern - os.listdir Die Funktion os.listdir gibt eine Liste der Dateien und Ordner aus. Parameter für diese Funktion ist der Pfad bis zu diesem Ordner. Der aktuelle Ordner wird mit "." angegeben. #Liste der Dateien und Ordner ausgeben, Windows http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12] ZMBP - Computer- Bioinformatik - Python - Input import os for datei_name in os.listdir("."): print(datei_name) Ist der Ordner in einem anderen Pfad, muss der entsprechende Pfad angegeben werden. IBM 403 Accounting Machine - born1945, Wikimedia Commons Programme aufrufen - subprocess.call Wenn das Programm in selben Ordner wie die Programmdatei liegt, kann das Programm einfach mit subprocess.call() aufgerufen werden. Dazu ist das Modul subprocess nötig. Entsprechend dem Betriebssystem den Pfad angeben, wenn das Programm nicht im selben Ordner liegt. #Programm aufrufen, Windows calculator import subprocess subprocess.call("calc.exe") Hinweis: Das Beispiel klappt, da die Anwendung in c:\windows\system32 liegt. Von diesem Ordner liegt eine Umgebungsvariable vor, diese Anwendungen können daher überall aufgerufen werden. Es ist daher keine Pfadangabe nötig. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12] ZMBP - Computer- Bioinformatik - Python - Input Programmausgabe speichern - subprocess.check_output Manchmal möchte man die Ausgabe externer Programme in einer Variablen speichern. Dazu hilft die Funktion subprocess.check_output(). #Programm aufrufen, Windows ipconfig.exe import subprocess get_ipconfig = subprocess.check_output("ipconfig.exe") print(get_ipconfig) Hinweis: Die Ausgabe geht oft über mehrere Zeilen, daher eventuell mit rstrip() nextline \n entfernen. IBM 650 at Texas A&M - Cushing Memorial Library and Archives, Texas A&M, Wikimedia Commons Benutzereingabe Bis jetzt konnten wir Daten nur über Variablen oder Dateien in das Programm eingeben. Manchmal ist es sinnvoll während des Programmablaufs Daten eingeben zu können. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12] ZMBP - Computer- Bioinformatik - Python - Input Interactiv - input() Die einfachste Möglichkeit etwas einzugeben, stellt die Funktion input() dar. #Eingabe, input() gen_number = input("Bitte 'Gen-Nummer' eingeben... ") print("Sie haben die Nummer ", gen_number, " eingegeben.") Die Funktion hält das Programm an und wartet auf eine Eingabe des Benutzers. Die Eingabe wird mit einem Enter abgeschlossen. Tipps: Benutzereingaben mit input() am Anfang der Programme einbauen. Überprüfung des Inputs durchführen ("Input validation"). Werte in der Komandozeilen beim Start des Programms eingeben sys.argv Eine gute Strategie ist es, wenn beim Start des Programms Werte mit eingegeben werden können ("Command line arguments"). Beim Start eines Python Programms in der Eingabeaufforderung (Terminal) können Parameter mitgegeben werden. Dies kann durch sys.argv aus dem Modul sys erreicht werden. #Parameter in der Eingabeaufforderung import sys print(sys.argv) In der Eingabeaufforderung wird folgendes eingetippt: python myprogram.py eins zwei drei Das Programm oben gibt folgende Liste aus: ['myprogram.py', 'eins', 'zwei', 'drei'] Das erste Element der Liste ist immer der Programmname. http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12] ZMBP - Computer- Bioinformatik - Python - Input Dann folgen die Parameter, die beim Aufruf des Programms übergeben wurden. Die Liste kann so ausgegeben werden: print('Dateiname: ',sys.argv[0]) print('Erster Parameter: ',sys.argv[1]) print('Zweiter Parameter: ',sys.argv[2]) Die Parameter werden als Zeichenketten gespeichert, daher bei Bedarf mit int() oder float() in andere Datentypen umwandeln. Formatierte Ausgabe Als Einstieg soll ein einfaches Beispiel dienen. Eine ausführlichere Beschreibung findet sich unter http://www.python-kurs.eu/python3_formatierte_ausgabe.php #Formatierte Ausgabe print("Gennummer: %5d, Expressionrate: %10.2f" % (123, 29.2689)) In der print() Funktion sind die Ausgabe mit Formatierungsbefehlen versehen. "Gennummer: %5d, Expressionrate: %10.2f" ist die Formatierung (123, 29.2689) ist der Tupel mit Werten, beide Teile werden mit % getrennt. In der Formatierung befinden sich 2 Platzhalter, die durch ein % gekennzeichnet werden. %5d ist der Platzhalter für den ersten Wert im Tupel (123). 5 bedeutet, dass insgesamt 5 Stellen vorgesehen werden. d ist das Zeichen für Integer, i würde auch gehen. %10.2f ist der zweite Platzhalter für den zweiten Wert im Tupel (29.2689). 10.2 bedeutet insgesamt 10 Stellen und 2 Dezimalstellen, f steht für ein floating-Zahltyp. Es wird folgendes ausgegeben: Gennummer: 123, Expressionrate: 29.27 Die ganze Schönheit der Formatierung erschließt sich nur, wenn weitere Zeilen ausgegeben werden. Gennummer: 123, Expressionrate: 29.27 Gennummer: 4, Expressionrate: 0.10 Gennummer: 12678, Expressionrate: 1234.12 http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12] ZMBP - Computer- Bioinformatik - Python - Input Methode format() Eine neuere Weise die Ausgabe zu formatieren ist mit der Methode format() . #Formatierte Ausgabe mit Methode format() print("Gennummer: {a:5d}, Expressionrate:{p:10.2f}".format (a=123, p=29.2689)) Ausgegeben wird wieder wie oben: Gennummer: 123, Expressionrate: 29.27 Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12] ZMBP - Computer- Bioinformatik - Python - Input Wissenschaftlich Arbeiten mit Computer und Internet Kursübersicht Im Skript suchen Bioinformatik Bioinformatik Python Tag 1 1. Einführung 2. Strings 3. Dateien Tag 2 4. Listen,Schleifen 5. Funktionen Tag 3 6. Verzweigung 7. Reg.Exp. Tag 4 8. Dictionaries 9. System/Input Index Impressum Python - Index Übungsaufgaben ILIAS append(), Listen Funktionen für Verzweigungen Liste - einzelne Elemente reverse() assert() Funktionen mehrere Parameter Literatur, Python round() Bedingung Funktionen ohne Paramenter logische Operatoren rstrip Bytecode Funktionen Voreinstellungen logische Verneinung, regex Schleife Character groups, regex get(), Dictionary lower() shutil.copy() close() Einleitung Module shutil.rmtree() conditional statement Escapezeichen Modul os sort(), Listen Concatenation, Fehlermeldungen Modul shutil Strings sorted(), Dictionary Concatenation, files Listen Monty Python sorted(), Listen count Muster in Zeichenketten split() find Numpy \d, regex Formatierte Ausgabe os.listdir() Datei - lesen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python00index.html[22.10.2015 15:11:13] ZMBP - Computer- Bioinformatik - Python - Input format() os.isdir() Datei - lesen group(), regex os.mkdir() split(), re.split, regex Datei schliessen IDE os.makedirs() Spyder Datei schreiben IDLE os.path.exists() start(), regex Datentypen if... os.rename() startswith() del(), Listen if...else os.rmdir() str() Dictionary if...elif os.remove() str(), Datentypen Dictionary, Element aufrufen import os.rmdir strings Dictionary, Element löschen input() pandas subprocess.call insert(), Listen pass() subprocess.check_output iPython Perl int() Pfade und schreiben Substring Dictionary, Element hinzufügen items(), Dictionary Pipe, regex sys.argv Dictionary erzeugen Kennzeichen pop(), Dictionary Textdatei Download key, Dictionary pop(), Listen Tupel Encapsulation keys(), Dictionary Python 2 | 3 Tutorials end(), regex kmer Python Virtuelle Maschine upper() print() value, Dictionary Positionen, regex Variablen extend(), Listen Kommentare findall(), regex Kombinationen, regex finditer(), regex Konsole Programmiersprachen Vergleichsoperatoren float() len(), Listen Punkt, regex Verknüpfungen, Strings for-Schleife, Zeichenkette len(), string Quantifier, regex Verknüpfung, Listen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python00index.html[22.10.2015 15:11:13] ZMBP - Computer- Bioinformatik - Python - Input for-Schleife, Datei Liste range() Verzweigungen Funktionen Liste - 2D raw string Weiterleitung Funktionen aufrufen Liste - Bereich Reguläre Ausdrücke while Funktionen benannte Parameter Liste - Element ersetzen replace() zeichenketten Funktionen erstellen Liste - Index re.search() Notebook Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python00index.html[22.10.2015 15:11:13]