126
ZMBP - Computer- Bioinformatik - Python - Einführung http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00] 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. Tag 4 8. Dictionaries 9. System/I nput Index Impressum Bioinformatik 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 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.

Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

Embed Size (px)

Citation preview

Page 1: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

Wissenschaftlich Arbeiten mit Computer und Internet

Kursübersicht

Im Skript suchen

Bioinformatik

Python

Tag 11. Einführung2. Strings3. Dateien

Tag 24.Listen,Schleifen5. Funktionen

Tag 36. Verzweigung7. Reg.Exp.

Tag 48. Dictionaries9. System/Input

Index

Impressum

Bioinformatik

Python für Biologen - In 4 TagenNach 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 12Die Daten wurden von einem Plattenleser generiert.

Nächster Kurs16.2.16 - 19.2.1610 - 16:00Raum 168, Morgenstelle 3max. 12 TeilnehmerAnmeldung unter Campus Uni-Tuebingen

Tag 1 - EinführungMü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.

Page 2: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

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 BiologenEs gibt eine Vielzahl von ProgrammiersprachenListe der Programmiersprachen

Welche Programmiersprachen kommen für Biologen in Frage?

Excel Funktionen Kurs ExcelExcel Makros und VBA Kurs Excel

Skriptsprachen Python und PerlDieser Kurs und Kurse ZDV

R für Statistik, Microarrays, Bildauswertung Mikroskopie - ImagingBilton, Mark: Introduction to "R"

PHP, WebprogrammierungKurse ZDV

Page 3: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

Java, Einsatz auf verschiedenen Plattformen (Windows, MacOSX, Linux) möglichKurse 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 werdenDie 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

Page 4: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

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.

Page 5: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

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 PythonPython 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.

Page 6: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

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.

IPythonDokumentationInteraktive Konsole mit noch mehr FunktionenIPython 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.

Page 7: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

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 eineListe 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 ÜbersichtMehr 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 bereitseingegbener 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.

Page 8: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

IPython NotebookEin geniale Methode um mit IPython zu arbeiten ist IPython Notebookhttp://ipython.org/notebook.html

Standard Tastaturkürzel

Mac Tastenkürzel

Page 9: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

IPython Notebook - Text und Code.

Nachdem IPython installiert ist, am besten mit dem Paket Anaconda oder Python(x,y), wird das Programm in der Konsole mitipython notebookaufgerufen.

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.

Page 10: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

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

Page 11: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

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 Windowspython C:\Temp\test.py

In der Konsole wird die Datei mitexecfile("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.htmlHier werden die Befehle farbig gekennzeichnet (Progammsprachauszeichnung)

Tipp:Es gibt noch eine andere witzige Art Python Code auszuführen.Python onlinehttp://www.tutorialspoint.com/execute_python_online.phpPython 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

Page 12: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

(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 Erleichterungbei 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 SpyderEine kurze Einführung in Spyder gibt es unterhttp://www.southampton.ac.uk/~fangohr/blog/spyder-the-python-ide.html

Page 13: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

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öffnetStrg + S -> speichert aktuelle Seite.Vorlage für eine neue Codeseite, siehe unten.Dreifacher Klick mit der Maus markiert eine Zeile -> Zeile kann kopiert werden

Page 14: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

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 XYnur 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.

Page 15: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

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 eingesetztam Anfang des Codes folgendes einfügen:

# -*- coding: utf-8 -*-

Anweisung für SpyderDiese 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 3https://docs.python.org/3/contents.html

Python 2

Page 16: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

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 VerlagDas 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 unterhttp://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. AuflageFü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 pandasSehr 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. KGaAIch kenne das Buch leider nicht, daher keine Bewertung.

Tutorials, Online Python, Videos

Page 17: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

Oliver Kohlbacher, Applied Bioinformatics Group - Online Vorlesung TimmsVorlesung Bioinformatik für Lebenswissenschaftler, 2. StundeVorlesung Bioinformatik für Lebenswissenschaftler, 3. StundeVorlesung Bioinformatik für Lebenswissenschaftler, 4. StundeVorlesung Bioinformatik für Lebenswissenschaftler, 5. Stunde

Dr. Martin Jones - Python for Biologistshttp://pythonforbiologists.com/index.php/introduction-to-python-for-biologists/

Programming Course for Biologists at the Pasteur Institutehttp://www.pasteur.fr/formation/infobio/python/

Bernd Klein - Python Onlinehttp://www.python-kurs.eu/

Dr. Chuck (Charles Severance) - Videos, Audios, Beispielehttp://www.pythonlearn.com/

Codeacademy PythonOnline Kurs, keine Registrierung notwendighttps://www.codecademy.com/en/tracks/python

TryPythonInteraktiver Kurs, keine Registrierung, Plugin MS Silverlight bzw. Moonlight nötig.http://www.trypython.org/

Learnpython.orgOnline Kurs, keine Registrierunghttp://www.learnpython.org/

Python an der Uni Tübingen

KIS - Kurs am ZDV - Einführung in Python, Oktober 2015https://www.kis.uni-tuebingen.de/kis4/kursdetails.php?id=15010124

Oliver Kohlbacher, Applied Bioinformatics Group - Online Vorlesung TimmsVorlesung Bioinformatik für Lebenswissenschaftler, 2. StundeVorlesung Bioinformatik für Lebenswissenschaftler, 3. StundeVorlesung Bioinformatik für Lebenswissenschaftler, 4. StundeVorlesung 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 Datenverarbeitunghttp://campus.verwaltung.uni-tuebingen.de/lsfpublic/rds?state=verpublish&status=init&vmfile=no&moduleCall=webInfo&publishConfFile=webInfo&publishSubDir=veranstaltung&veranstaltung.veranstid=109969

Page 18: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Einführung

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python.html[22.10.2015 15:11:00]

Kenneth Berendsen, ZMBP - Motif Mapper for Pythonhttp://www.uni-tuebingen.de/fakultaeten/mathematisch-naturwissenschaftliche-fakultaet/fachbereiche/zentren/zmbp/plant-physiology/research-groups/harter/berendzen/motif-mapper-for-python.html

Chris Culy, Seminar für Sprachwissenschaftenhttp://www.sfs.uni-tuebingen.de/~cculy/courses/S2014/ModelsSem/resources.html

Python Package achrolab, Psychologiehttp://www.uni-tuebingen.de/psychologie/meth/achrolab

Programmieren in der ArcGIS-Umgebung mit Python, Geographiehttp://www.geo.uni-tuebingen.de/arbeitsgruppen/geographie/forschungsbereich-geographie/gis-zentrum/kurse-und-vortraege/programmieren-in-der-arcgis-umgebung-mit-python.html

Kurs-Wissenschaftliches Rechnen und Visualisierung für Geowissenschaftlerhttp://www.geo.uni-tuebingen.de/arbeitsgruppen/mineralogie-geodynamik/forschungsbereich/geologie-geodynamik/workgroup/people/willi-kappler/wissenschaftliches-rechnen-und-visualisierung-fuer-geowissenschaftler.html

Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen

Page 19: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

Wissenschaftlich Arbeitenmit Computer und Internet

Kursübersicht

Im Skript suchen

Bioinformatik

Python

Tag 11. Einführung2. Strings3. Dateien

Tag 24.Listen,Schleifen5. Funktionen

Tag 36. Verzweigung7. Reg.Exp.

Tag 48. Dictionaries9. System/Input

Index

Impressum

Bioinformatik

Tag 1Python - 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

Arbeiten mit "Strings", sind aber keine Zeichenketten - Wikimedia Commons

Biologen und Programmierer von Python haben eine Gemeinsamkeit, sie sind anZeichenketten interessiert.

Wenn in der Biologie programmiert wird, dann sind oft Buchstaben im Spiel.

Gensequenzen, Aminosäuresequenzen oder Textdateien aus Datenbanken, dieanalysiert werden.

Solche Abfolgen von Buchstaben werden Zeichenketten genannt, englisch Strings.

Page 20: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

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 vieleProgrammiersprachen 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 Python3siehe 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_functionJetzt wird in Python2 die print Anweisung nicht mehr akzeptiert und der Code wird auchgarantiert in Python3 verstanden.

In Zukunft werden wir daher nur die print() Funktion verwenden.

Bei der print()-Funktion werden die Werte mit einem Leerzeichen ' ' getrenntausgegebenund 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 definiertwerden.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 sieheBernd Klein http://www.python-kurs.eu/python3_print.php

Page 21: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

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 Zeilengehen.print(" " " HelloWorld" " ")Dies wird dann auch mit neuer Zeile ausgegeben.

Strings mit doppelten Anführungszeichen in jeder Zeile, werden in einer Zeileausgegeben.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.

Page 22: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

Bundesarchiv - Wikimedia Commons

Kommentare

Die Kommentierung eines Codes ist sehr wichtig. Es kann das Programm leichternachvollzogen 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 (Bestcoding 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 undabgeschlossen."""

Page 23: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

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

Page 24: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

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 Zeilezweite 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 dieAnweisung abgeschlossen wurde.

Wikimedia Commons

EscapezeichenIn der Ausgabe eine neue Zeile einfügen

Wenn in einem String eine neue Zeile eingefügt werden soll, kann das mit einembesonderen 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.

Page 25: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

# Eine neue Zeile in einem String einfuegenprint("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 Codeseingeführt werden.

Die Variable muss nicht dimensioniert werden. Python merkt selbst was für ein Typ dieVariable 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 avariable"). Das Gleichheitszeichen "=" bedeutet hier also etwas anderes.

Das Programm merkt sich den Wert "CTGATCATAT" unter dem Variablennamemy_dna.

Page 26: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

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() ausgebenprint(my_dna)

In der print() -Anweisung fehlen bei Variablen die Anführungszeichen.

Variablennamen können jeden Buchstaben oder jede Zahl enthalten, außer eine Zahlam 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 arbeitenNun möchten wir mit Strings etwas machen. Zuerst sollen Strings verknüpft werden.

Bundesarchiv - Wikimedia Commons

Page 27: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

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 Variablentyphaben müssen.Sowohl my_dna, als auch "ATGATGCGAT" sind Strings. Das geht also.

Folgendes geht nicht.

# String und Variable = Zahl verknuepfen

my_dna=3print(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 verwandelnkönnen.Zum Beispiel str() verwandelt eine Variable vom Typ Zahl in den Typ Zeichenkette.Das wird weiter unten behandelt.

Page 28: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

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 aufdem 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"))

Page 29: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

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 FehlermeldungTypeError: 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 werdenkönnen.IDLE und Spyder helfen bei der Überprüfung der Klammern.Bei IDLE dazu mit der Maus in die entsprechende Stelle klicken undMenü 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.

Page 30: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

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 Kleinbuchstabendargestellt werden.

Es gibt die Methoden lower() und upper() um das durchzuführen.

Methoden beziehen sich im Gegensatz zu Funktionen auf ein bestimmtes Objekt, hierzu string.

Daher ist die Syntax anders als bei Funktionen.

# Sequenz in Kleinbuchstaben verwandeln

my_dna="ATGCTA"print(my_dna.lower())

Die Syntax istVariablenname 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.

Page 31: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

# len() und Methode lower

my_dna="ATGCTA"dna_length=len(my_dna)print(dna_length.lower())

#Achtung produziert Fehler

Es wird der FehlerAttributeError: 'int' object has no attribute 'lower'angezeigt.

Suchen und ersetzen - Bundesarchiv - Wikimedia Commons

Ersetzungen ("replace")

Page 32: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

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 HILprint(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 der3. 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.

Page 33: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

Die eckige Klammer [ ] deutet das an.

# Substring

my_protein="MADDWDLHAVVR"#Gebe die 3.bis 6. Aminosaeure ausprint(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 abernicht 6.Und da wieder mit 0 als erstes gezählt wird, bedeutet diesmal 6 auch bis einschließlich6. Aminosäure.

-11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

HELLO WORLD0 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.

Page 34: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

Guillaume Paumier -Wikimedia Commons

Anzahl der gefundenen Teilstrings ("count")

In einer Aminosäuresequenz soll die Anzahl der gefundenen Substrings gezähltwerden.

Die Methode count() zählt die Anzahl der Substrings in einem String.

Hier das Beispiel

# Substring zaehlen

my_protein="MADDWDLHAVVR"# Zaehle die Alaninealanin_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 magischeAnweisungfrom __future__ import print_function.Beachte, dass in Python 3 print immer als Funktion print() verwendet werden mussund nicht mehr als print statement.https://docs.python.org/3.0/whatsnew/3.0.html

Page 35: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

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 gefundenwird.Die Methode find() gibt die Position aus, an der ein Zeichen gefunden wird.

# Substring finden, Achtung mit Fehler

my_protein="MADDWDLHAVVR"# suche Alaninealanin_find=my_protein.find('A')print("Alanin ist an " + str(alanin_find) + ". Stelle")

find() 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.

Das Beispiel stimmt noch nicht ganz. Eigentlich müsste die 2. Stelle ausgegebenwerden.Es wird aber die 1. Stelle ausgegeben, daherprint("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.

Page 36: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 1. Kurstag - Strings

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python01strings.html[22.10.2015 15:11:02]

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

Page 37: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04]

Wissenschaftlich Arbeiten mitComputer und Internet

Kursübersicht

Im Skript suchen

Bioinformatik

Python

Tag 11. Einführung2. Strings3. Dateien

Tag 24.Listen,Schleifen5. Funktionen

Tag 36. Verzweigung7. Reg.Exp.

Tag 48. Dictionaries9. System/Input

Index

Impressum

Bioinformatik

Tag 1Python - Dateien lesen und schreibenNach einer Idee und mit Beispielen von Dr. Martin Jones - http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists

Übungsaufgaben ILIASÜbungsaufgaben zip

David Bohl - Wikimedia Commons

Page 38: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04]

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() undsysarv()). In der Biologie werden Daten aber meist über Dateien eingegeben.Das ist zweckmäßiger, da unterschiedliche Daten mit dem gleichen Programm verarbeitet werdenkönnen.Darüber hinaus sind die Daten sehr umfangreich und sollten daher nicht mit dem Programm vermischtwerden.

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 TextdateienFasta und andere Formate für DNA- oder Proteinsequenzen.http://de.wikipedia.org/wiki/FASTA-FormatDateierweiterung ist .fa, .mpfa, .fna, .fsa oder .fasta. Besteht in der ersten Zeile aus einer Kopfzeile ("Headerline") mit eindeutigen Namen, Nummernund 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 Formatesiehe http://www.ncbi.nlm.nih.gov/Sequin/sequin.hlp.html#SequenceDataFormat

Page 39: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04]

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 Tutorialhttp://biopython.org/DIST/docs/tutorial/Tutorial.htmlhttp://biopython.org/wiki/SeqIO

Tabelle in CSV Format (Comma separated values) oder Tabellen mit Tab oder Semikolongetrennten Werten. Analysegeräte geben Tabellen als einfache Textdateien aus. Mit Python können sie ausgewertetwerden.

Page 40: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04]

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 eineTextdatei 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 aufgerufencode.py = das Python Programm> Weiterleitungausgabedatei.txt = die Ausgabedatei in die geschrieben wird.Ist die Datei nicht im gleichen Ordner, muss der Pfad angegeben werden.

Page 41: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04]

Computer History Museum - Wikimedia Commons

Textdatei öffnen und lesenMit 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 dieProgrammdatei befindet.Ist die Datei woanders, muss ein Pfad eingegeben werden.Der Pfad unterscheidet sich je nach Betriebssystem.

PfadeLiegt die Datei, die geöffnet werden soll nicht in dem gleichen Ordner wie die Programmdatei, muss einPfad 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")

Page 42: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04]

MacOSX benutz folgende Pfadstrukturmy_file=open("/Users/mueller/Desktop/beispiel/dna.txt")

Und in Linuxmy_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 eingegebenwerden.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 schreibenUm in eine Textdatei zu schreiben sieht das Vorgehen ganz ähnlich aus, wie beim Lesen einerTextdatei.

Hier wird der Parameter "w" beim Öffnen der Datei mitgegeben.

Page 43: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04]

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öffnetmy_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ßenDie 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")

Page 44: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python -1. Kurstag - Dateien lesen und schreiben

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python02files.html[22.10.2015 15:11:04]

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

Page 45: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

Wissenschaftlich Arbeitenmit Computer und Internet

Kursübersicht

Im Skript suchen

Bioinformatik

Python

Tag 11. Einführung2. Strings3. Dateien

Tag 24.Listen,Schleifen5. Funktionen

Tag 36. Verzweigung7. Reg.Exp.

Tag 48. Dictionaries9. System/Input

Index

Impressum

Bioinformatik

Tag 2Python - Listen und SchleifenNach einer Idee und mit Beispielen von Dr. Martin Jones - http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists

Übungsaufgaben ILIASÜbungsaufgaben

Listen erstellen und mit Listen arbeitenIn Python gibt es keinen nativen Datentyp Array wie in anderen Programmiersprachen.Arrays sind Felder oder Feldreihen mit denen sich die Daten in 1-, 2- odermehrdimensionaler Art darstellen lassen.Allerdings gibt es den Datentyp Listen mit denen ebenfalls solche Strukturen erstellenlassen.Darüber hinaus kann mit zusätzlichen Paketen (NumPy, PyLab) Arrays erstellt werden.

Wir haben unter Zeichenketten erfahren, dass eine Zeichenkette als "Liste" betrachtetwerden 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")

Page 46: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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ügtwerden,Variablen oder Listen in einer Liste.Wenn Listen in Listen gesetzt werden, können sogenannte "nested lists" erstelltwerden.Dadurch kann eine mehrdimensionale Matrix oderein mehrdimensionales Array realisiert werden.Ein Beispiel sind Listen in Listen. Dies wird weiter unten mit Tabellen in 2D-Listenerlä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

Page 47: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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 ermitteltwerden.

# 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.

Page 48: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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.

Page 49: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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.

Page 50: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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] löscht das 2. Element aus der Liste.

del ist eine Anweisung ("Statement")

HinweisEs können auch ganze Bereiche gelöscht werden.del passeri[0:2] löscht die ersten zwei Elementedel passeri[1:] löscht ab dem 2. Element (einschließlich) den ganzen Rest

Page 51: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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 Elemententfernt.entfernt=passeri.pop(0) Im Beispiel wird das erste Element aus der Liste entfernt und der Variablen entferntzugewiesen.

Page 52: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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.

HinweisDie 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.Beispielpasseri.extend(["Buchfink","Gruenfink"])

Page 53: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

Vogeleier - Meyers Konversationslexikon, Wikimedia Commons

Länge bestimmen

Wie bei Zeichenketten kann mit der Funktion len() die Länge der Liste ermitteltwerden.

# Liste, Laenge ermiteln

passeri=["Blaukelchen", "Zaunkoenig", "Baumlaeufer"]lenght=len(passeri)print("Es sind", lenght, "Singvoegel in der Liste")

Page 54: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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

Page 55: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

Cacatua alba - snowmanradio, Wikimedia Commons

Listen sortieren - sort und reverse

Mit Hilfe der Methoden sort() und reverse() werden die Elemente in einer Listesortiert.

# 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 neuenSortierung.Die ursprüngliche Liste ändert sich nicht.aves_sortiert = sorted(aves)print("Voegel sortiert: ",aves_sortiert)

Page 56: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

# 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

SchleifenAnstatt 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

Page 57: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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 werdenmü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 IndentationTabs.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:

Page 58: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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 alsZeichenketten vor.Die einzelnen Elemente sind durch ein Trennzeichen voneinander getrennt.

Typisches Beispiel sind Tabellen. Hier sind die Trennzeichen Semikolon, Kommas oderTabs.

# 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 isttauben_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]

Page 59: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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 oderschreibend) geöffnet wird:

Page 60: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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 dieFunktion 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 Zahlhochgezählt.Es wird die Zahl angegeben für die die Schleife nicht mehr ausgeführt wird, in unseremBeispiel 11.

Page 61: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

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 mehrdurchgeführt wird.

Abgetrennt durch ein Komma (Parameter in einer Funktion), nicht zu verwechseln mitListen.

range(3,7) wäre von 3 bis 6. Also 3,4,5,6

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.

Page 62: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

# 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 ausgebenprint(table)

#Zum Beispiel die 2. Zeile und 1. Spalte ausgebenprint(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-levelH. saphiens,ATCGTCGTA,xy,200B. 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 die Zeile in eine Liste.line_list=line.split(',')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 Codeausgegeben.print(table[1][0])

Hinweis - NumPy und pandas:Das Auswerten von Tabellen lässt sich einfacher mit den Modulen NumPy undpandas durchführen.Beide sind standardmäßig nicht in Python installiert

NumPy und pandas sind hervorragende Werkzeuge für die wissenschaftlicheDatenanalyse.Hier wird eine weitere Tür aufgestoßen, um Python im Wissenschaftsbereich erfolgreicheinzusetzen.

Page 63: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Listen und Schleifen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python03list.html[22.10.2015 15:11:05]

Vor allem pandas bietet umfangreiche Möglichkeiten eine Tabelle in Pythoneinzulesen 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 DataFrameimport pandas as pd

table = pd.read_csv("tabelle.txt")

# ganze Tabelle ausgebenprint(table)

#Zum Beispiel die 2. Zeile und 1. Spalte ausgebenprint('2. Zeile und 1. Spalte = ',table.ix[1,0])

Der Code ist wesentlicher übersichtlicher und viele Methoden und Parameter erleichtern die Arbeit.

pd.read_csv 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.

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)

table 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.

Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen

Page 64: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07]

Wissenschaftlich Arbeitenmit Computer und Internet

Kursübersicht

Im Skript suchen

Bioinformatik

Python

Tag 11. Einführung2. Strings3. Dateien

Tag 24.Listen,Schleifen5. Funktionen

Tag 36. Verzweigung7. Reg.Exp.

Tag 48. Dictionaries9. System/Input

Index

Impressum

Bioinformatik

Tag 2Python - FunktionenNach einer Idee und mit Beispielen von Dr. Martin Jones -http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists

Übungsaufgaben ILIASÜbungsaufgaben

Neuron - Nick Gorton, Wikimedia Commons

Page 65: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07]

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 Stellenverwendet.Das spart Platz.

Umfangreiche Programme können so in übersichtliche Teile zerlegt werden.

Pflege der Programme ist erleichtert. Änderungen und Fehlerbeseitigungnur 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 FunktionZuerst 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 dasProgrammmit kopieren und einfügen übernommen werden.Wenn sich etwas ändert, muss nun an verschiedenen Stellen im Programm gearbeitetwerden.

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

Page 66: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07]

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 Funktionverwendet wird.

Die Funktion enthält einen Rückgabewertreturn AT_gehalt

Lässt man dieses Programm mit der Funktion durchführen, so erhält man auf demBildschirm - 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 Parameteraufgerufen.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) undaußerhalb (globale Variable) vor.Das sind zwei unterschiedliche Variablen.Die Funktionsvariablen (dna, laenge, A_zahl, T_zahl, AT_gehalt) gelten nur innerhalbder Funktion.

Die Funktion kann noch verbessert werden.Werden Sequenzen in Kleinbuchstaben eingesetzt, wird der AT-Gehalt nicht berechnet.Daher verbessern wir die ZeilenA_zahl = dna.upper().count('A')T_zahl = dna.upper().count('T')

Page 67: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07]

Jetzt wird die Eingabe (dna) in Großbuchstaben verwandelt und A bzw. T wirdgefunden.

Die Stellengenauigkeit der Ausgabe des AT-Gehalts ist nicht bestimmt unddaher 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 dieStellenzahl 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

Page 68: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07]

Funktion mit mehreren ParameternIn 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)

HinweiseEs 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ärekein 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 stehtund 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.

Page 69: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07]

Mouse cingulate cortex neurons - Shushruth , Wikimedia Commons

Benannte ParameterWir haben gesehen, dass beim Aufruf der Funktion genau die Reihenfolge derParameter eingehalten werden muss.

In Python können die Parameter benannt werden ("keyword arguments"), dann ist dieReihenfolge 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")

HinweisDies 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)

Page 70: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07]

# das geht

get_AT_gehalt("atgcat", rund=3)

Neuron-matrix - Sevela.p , Wikimedia Commons

Voreinstellung von ParameterFü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ürdie Variable rund angegeben wird, wird der Standardwert 2 genommen.Wird ein Wert angegeben, dann wird dieser Wert genommen.get_AT_gehalt("atgcat,3")

Page 71: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07]

Hinweis:Werden zu wenige Parameter beim Aufruf der Funktion angegeben, erscheint eineFehlermeldung.TypeError: func_AT_gehalt() missing 1 required positional argument: 'rund'

Neuronehisto - Tvtb , Wikimedia Commons

Datentypen beachtenDie 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. DieFunktion 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

Page 72: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07]

bzw. in eine ganze Zahl.Die eingebaute Funktion float() wandelt eine Zeichenkette in eine Zahl mitNachkommastellen.

Neuron - Hic et nunc , Wikimedia Commons

Funktionen testen - assertEs 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 eingeleitet.assert get_AT_gehalt("atgc") == 0.5Der erwartete Rückgabewert wird mit 2 Gleichheitszeichen == angegeben.

Verläuft der Test positiv und kein Fehler wurde entdeckt, läuft das Programm ohne

Page 73: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Funktionen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python04funk.html[22.10.2015 15:11:07]

Bildschirmausgabe durch.Bei Fehler wird ein AssertionError angegeben.

Neuron - Actam, Wikimedia Commons

Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen

Page 74: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08]

Wissenschaftlich Arbeitenmit Computer und Internet

Kursübersicht

Im Skript suchen

Bioinformatik

Python

Tag 11. Einführung2. Strings3. Dateien

Tag 24.Listen,Schleifen5. Funktionen

Tag 36. Verzweigung7. Reg.Exp.

Tag 48. Dictionaries9. System/Input

Index

Impressum

Bioinformatik

Tag 3Python - VerzweigungenNach einer Idee und mit Beispielen von Dr. Martin Jones - http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists

Übungsaufgaben ILIASÜbungsaufgaben

Page 75: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08]

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.

Page 76: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08]

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 Operatorennot nichtand undor 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 sindObjekt1 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

Page 77: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08]

Einfache Verzweigung - ifDie 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.5Wie bei Schleifen und eigenen Funktionen wird der "header" mit einem Doppelpunkt :abgeschlossen.

Der Codeblock der Verzweigung ist eingerückt. Auch hier auf einheitliche Einrückungachten.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 espass.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,

Page 78: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08]

wenn Programmteile eventuell in Funktionen verwandelt werden können.

Schwarzes Moor bei Bremen - BogumilaC, Wikimedia Commons

Verzweigung mit elseIn der Verzweigung mit if - else besteht eine alternative Anweisung, falls die Bedingungnicht 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:

Page 79: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08]

datei2.write(prot + "\n")

datei1.close()datei2.close()

In dem Beispiel oben werden zwei Dateien geöffnet. In die datei1 wird geschrieben, wenndie Bedingungprot.startswith('c') erfüllt ist. Wenn nicht wird in die andere Datei geschrieben

Mainau - Arboretum - Mummelgrummel, Wikimedia Commons

Verzweigung mit if - elifWenn mehr als 2 Verzweigungen geplant sind, muss mit if - else eine weitere Ebene mit ifeingezogen 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")

Page 80: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08]

datei1.close()datei2.close()datei3.close()

Dieses Programm liefert die gewünschten Ergebnisse, aber es wird schon eine 3. Ebeneder 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

Page 81: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08]

while - SchleifeNeben der for-Schleife gibt es noch die while-Schleife.In der Schleife ist eine Bedingung enthalten und wird solange ausgeführt bis die Bedingungnicht mehr zutrifft.

# while-Schleife

zahl = 0

while zahl<10: print(zahl) zahl = zahl +1

In der Anweisungwhile zahl<10:ist eine Bedingung enthalten. Solange die Bedingung erfüllt wird, wird der Codeblockausgeführt. Mitzahl = zahl +1wird die variable zahl hochgezählt und die Bedingung ist nach dem 10. Durchlauf nichtmehr 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

Page 82: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08]

Bedingungen mit logischen OperatorenMit 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 Anweisungif 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 CA and not B

Page 83: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08]

Baumwurzeln und Baumstämme- van Gogh, Wikimedia Commons

Funktionen für VerzweigungenEs 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.

Mitprint(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 geschriebenwerden.

Page 84: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - 2. Kurstag - Bedingungen

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python05bed.html[22.10.2015 15:11:08]

# 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 Falsefalls nicht.

Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen

Page 85: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

Wissenschaftlich Arbeitenmit Computer und Internet

Kursübersicht

Im Skript suchen

Bioinformatik

Python

Tag 11. Einführung2. Strings3. Dateien

Tag 24.Listen,Schleifen5. Funktionen

Tag 36. Verzweigung7. Reg.Exp.

Tag 48. Dictionaries9. System/Input

Index

Impressum

Bioinformatik

Tag 3Python - Reguläre AusdrückeNach 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.

Diaethria anna - Charlesjsharp, Wikimedia Commons

Page 86: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

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 einzelnenBuchstaben 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") inPython eingeführt.

Reguläre Ausdrücke sind universell und werden auch in anderen ProgrammiersprachenundKommandozeilenprogramme (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

Page 87: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

" Caterpillar of the Old World Swallowtail " - Archaeodontosaurus, Wikimedia Commons

ModuleMit 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 Bedarfaufzurufen.Das Modul wird mit import Modul in den Code eingebunden.

Beispiel für Module ist time für Zeitfunktionen.

import timeprint(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-Tasteabgeschlossen.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....

Page 88: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

"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 demModulnamen 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.

Page 89: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

Raw strings

Mit einem Backslash können innerhalb einer Zeichenkette spezielle Buchstaben fürSteuerbefehle maskiert werden.Zum Beispiel ist "\n" der Befehl für eine neue Zeile. Leider kollidiert das in regulärenAusdrü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ßerKraft gesetzt.

print(r"\n\t")

Es wird tatsächlich "\n\t" ausgegeben und nicht eine neue Zeile mit einem zusätzlichenTab eingefügt.

Kleiner Fuchs - Vulkan , Wikimedia Commons

Suche nach MusternDie 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 inder gesucht wird.

# Reguläre Ausdruecke, re.search, EcoRI

import re

dna = "ATCGAGTGAATTCAGCACGTCG"

Page 90: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

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

Page 91: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

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 istBisI.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):

Page 92: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

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 inder Klammer ausgeschlossen.GC[^ATG]GC bedeutet, dass nur GCCGC gefunden wird.Nicht GCAGCNicht GCTGCNicht GCGGC

(Nicht so perfekt, außer A, T und G geht jedes beliebige Zeichen!)

Anzahl der Zeichen und Wiederholungen ("Quantifier") - ? + * und { }

Page 93: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

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 werdenkö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 optionalsind.Es gehen aber auch beliebig viele Zeichen.GCA*GC bedeutet, dass GCAGC geht GCAAGC geht GCAAAGC geht usw. GCGC geht auchGCXGC 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 angegebenwerden.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.

Page 94: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

"Butterfly sikkim" - Incomposition , Wikimedia Commons

Positionen , ^ und $

Das Dachsymbol ^ bezeichnet den Start einer Zeichenkette und das Dollar-Symbol $ das Ende.

^AAA bedeutetAAAGCGC gehtGCAAAGC geht nicht.

AAA$ bedeutetGCGCAAA gehtAAAGcgC 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.

Page 95: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

Dirce Beauty Colobura dirce - Julia W , Wikimedia Commons

Kombinationen von Ausdrücken

Die oben vorgestellten Zeichen können kombiniert werden. Das macht reguläreAusdrü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.

Page 96: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

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 gefundenwurde, 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())

Page 97: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

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() untersuchtwerden kann.

Wenn mehrere Teilergebnisse ausgegeben werden sollen, kann der Ausdruck in Klammern gesetzt werden.Wir suchen nachGA[ATGC]{3}AC[ATGC]{2}ACDie Sequenz GA, es folgen 3 Basen, dann AC und weiteren 2 Basen und schließlichAC.

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 angegebenGA([ATGC]{3})AC([ATGC]{2})ACDer erste Teibereich wird mit m.group(1) angesprochen, der zweite Bereich mitm.group(2)

Es wird folgendes ausgegeben:

Der ganze Bereich: GACGTACGTACDer erste Bereich: CGT Der zweite Bereich: GT

Page 98: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

Zitronenfalter - Schizoschaf , Wikimedia Commons

Die Postion des Treffers ausgeben

Das Match-Objekt von re.search() enthält auch die Information über die Position desTreffers.

Die Methoden start() und end() geben den Anfang und das Ende des Treffers in derSequenz 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 0angefangen.1. Base hat den Index 0. Daher ist 2 die 3. Base.

Page 99: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

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 gesetztwurden 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 angegebenGA([ATGC]{3})AC([ATGC]{2})AC Die Startposition der ersten Bereichs wird mitm.start(1) angesprochen.

Für end() und den zweiten Bereich entsprechend.

Page 100: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

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)

Page 101: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

[^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 ATGCnoch Stellen mitunbestimmten Basen N, R, Y, W. ("ambiguity codes") enthält.N - A,T,C oder GR - A oder GY - C oder TW - A oder Thttp://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 Ausdruckbestimmt

Plate VI from Europas bekannteste Schmetterlinge - Dr. F. Nemos , Wikimedia Commons

Page 102: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Reguläre Ausdrücke

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python06re.html[22.10.2015 15:11:10]

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 abfragenlässt.Es ist ein Iterator Object , also Iteration, daher finditer().Das Objekt enthält die Start- und End-Positionen, die mit den Methoden start() undend() 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

Page 103: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Dictionaries

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11]

Wissenschaftlich Arbeitenmit Computer und Internet

Kursübersicht

Im Skript suchen

Bioinformatik

Python

Tag 11. Einführung2. Strings3. Dateien

Tag 24.Listen,Schleifen5. Funktionen

Tag 36. Verzweigung7. Reg.Exp.

Tag 48. Dictionaries9. System/Input

Index

Impressum

Bioinformatik

Tag 4Python - DictionariesNach einer Idee und mit Beispielen von Dr. Martin Jones - http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists/

Übungsaufgaben ILIASÜbungsaufgaben

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.

Page 104: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Dictionaries

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11]

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 einenzweiten Wert erweitert. Statt einem festen Index, wie in der Liste, kann ein Schlüssel ("Key") eingegebenwerden, 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

Page 105: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Dictionaries

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11]

Dictionary erzeugenDie 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 Doppelpunktgetrennt 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 gemachtwerden.

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 Klammerautomatisch eine Einrückung.Das sieht schöner aus. Es kann ausnahmsweise beliebig eingerückt werden. Durch die geschweifte Klammer ist das eindeutig.

Page 106: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Dictionaries

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11]

Der Wert der einzelnen Elemente kann mit dem Key in einer eckigen Klammeraufgerufen 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)

Page 107: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Dictionaries

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11]

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 Anweisungenzyme.pop('EcoRI') gelöscht.

Städtische Bibliotheken Dresden Ecke Prager Straße - Rechnerpool - Conny, Wikimedia Commons

Beispiel: Zählen der Trinukleotide in einer

Page 108: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Dictionaries

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11]

SequenzDictionaries lassen sich wunderbar dafür einsetzen das Vorkommen der Trinukleotide ineiner 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 kNukleotide 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 mitfor 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_countsaufgenommen.Die meisten haben den Wert 0.

Page 109: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Dictionaries

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11]

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 KeyErrorFehler 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 0ausgegeben.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.

Page 110: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Dictionaries

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11]

The subject catalogue ("Schlagwortkatalog") of the University Library of Graz - Dr. Marcus Gossler, Wikimedia Commons

Iteration über eine DictionaryWenn 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()

Page 111: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Dictionaries

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11]

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, dessenWert 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 obigenBeispiel.

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 zusortieren.

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())

Page 112: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Dictionaries

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11]

Iteration über die Elemente - items()

Die Suche in einem Dictionary nach einem Schlüssel für einen bestimmten Wert wird inPython 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 2Werte: 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():

Page 113: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Dictionaries

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python07dic.html[22.10.2015 15:11:11]

if wert == 2: print(schluessel)

Die Methode items() hat einen klareren Aufbau und wird daher in Phyton gerneeingesetzt.

Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen

Page 114: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12]

Wissenschaftlich Arbeitenmit Computer und Internet

Kursübersicht

Im Skript suchen

Bioinformatik

Python

Tag 11. Einführung2. Strings3. Dateien

Tag 24.Listen,Schleifen5. Funktionen

Tag 36. Verzweigung7. Reg.Exp.

Tag 48. Dictionaries9. System/Input

Index

Impressum

Bioinformatik

Tag 4Python - System, Input, formatierteAusgabeNach einer Idee und mit Beispielen von Dr. Martin Jones - http://pythonforbiologists.com/index.php/introduction-to-python-for-biologists/

Übungsaufgaben ILIASÜbungsaufgaben

Card puncher - NARA - 513295 - Tony Wills, Wikimedia Commons

Mit Python können Dateien in einem Betriebssystem kopiert, verschoben, umbenannt odergelöscht werden.

Es muss berücksichtigt werden, dass Python auf unterschiedlichen Computer-

Page 115: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12]

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 verwaltenDateien 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 zurVerfü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:

Page 116: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12]

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.

BemerkungHier 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()

Page 117: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12]

Die Funktion os.mkdir() erstellt einen neuen Ordner

#Ordner erstellen, Windows

import os

os.mkdir("ordner1")

Mitos.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 Ordnerkopieren.

#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.

Page 118: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12]

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

Page 119: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12]

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.callWenn das Programm in selben Ordner wie die Programmdatei liegt, kann das Programmeinfach mitsubprocess.call() aufgerufen werden. Dazu ist das Modul subprocess nötig.Entsprechend dem Betriebssystem den Pfad angeben, wenn das Programm nicht imselben 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.

Page 120: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12]

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 \nentfernen.

IBM 650 at Texas A&M - Cushing Memorial Library and Archives, Texas A&M, Wikimedia Commons

BenutzereingabeBis 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.

Page 121: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12]

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 werdenkönnen("Command line arguments").

Beim Start eines Python Programms in der Eingabeaufforderung (Terminal) könnenParameter 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.

Page 122: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12]

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 AusgabeAls Einstieg soll ein einfaches Beispiel dienen.

Eine ausführlichere Beschreibung findet sich unterhttp://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 Zeilenausgegeben werden.

Gennummer: 123, Expressionrate: 29.27Gennummer: 4,Expressionrate: 0.10Gennummer: 12678,Expressionrate: 1234.12

Page 123: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python08input.html[22.10.2015 15:11:12]

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

Page 124: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python00index.html[22.10.2015 15:11:13]

Wissenschaftlich Arbeitenmit Computer und Internet

Kursübersicht

Im Skript suchen

Bioinformatik

Python

Tag 11. Einführung2. Strings3. Dateien

Tag 24.Listen,Schleifen5. Funktionen

Tag 36. Verzweigung7. Reg.Exp.

Tag 48. Dictionaries9. System/Input

Index

Impressum

Bioinformatik

Python - IndexÜbungsaufgaben ILIAS

append(),Listen

Funktionen fürVerzweigungen

Liste - einzelneElemente reverse()

assert()FunktionenmehrereParameter

Literatur, Python round()

Bedingung Funktionen ohneParamenter logische Operatoren rstrip

Bytecode FunktionenVoreinstellungen

logische Verneinung,regex Schleife

Charactergroups, regex get(), Dictionary lower() shutil.copy()

close() Einleitung Module shutil.rmtree()

conditionalstatement Escapezeichen Modul os sort(), Listen

Concatenation,Strings Fehlermeldungen Modul shutil sorted(), Dictionary

Concatenation,Listen files Monty Python sorted(), Listen

count find Muster inZeichenketten split()

Numpy

\d, regex FormatierteAusgabe os.listdir()

Datei - lesen

Page 125: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python00index.html[22.10.2015 15:11:13]

und schreiben 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,Elementaufrufen

import os.rmdir strings

Dictionary,Elementlöschen

input() pandas subprocess.call

insert(), Listen pass() subprocess.check_output

iPython Perl

int() Pfade Substring

Dictionary,Elementhinzufügen

items(), Dictionary Pipe, regex sys.argv

Dictionaryerzeugen Kennzeichen pop(), Dictionary Textdatei

Download key, Dictionary pop(), Listen Tupel

Encapsulation keys(), Dictionary Python 2 | 3 Tutorials

end(), regex kmer Python VirtuelleMaschine upper()

extend(), Listen Kommentare print() value, Dictionary

findall(), regex Kombinationen,regex Positionen, regex Variablen

finditer(), regex Konsole Programmiersprachen Vergleichsoperatoren

float() len(), Listen Punkt, regex Verknüpfungen, Strings

for-Schleife,Zeichenkette len(), string Quantifier, regex Verknüpfung, Listen

Page 126: Wissenschaftlich Arbeiten mit Computer und Internet ... · ZMBP - Computer- Bioinformatik - Python - Einführung 22.10.2015 15:11:00]

ZMBP - Computer- Bioinformatik - Python - Input

http://www.ipb.uni-tuebingen.de/kurs/comp/12_bioinformatic/python/kurs12_python00index.html[22.10.2015 15:11:13]

for-Schleife,Datei Liste range() Verzweigungen

Funktionen Liste - 2D raw string Weiterleitung

Funktionenaufrufen Liste - Bereich Reguläre Ausdrücke while

FunktionenbenannteParameter

Liste - Elementersetzen replace() zeichenketten

Funktionenerstellen Liste - Index re.search()

Notebook

Dieter Steinmetz, Universität Tübingen, ZMBP - Kursübersicht - Im Skript suchen