ZMBP - Computer- Bioinformatik - Python - Einführung

Werbung
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]
Herunterladen