<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>muvik-multigrid &#187; InputOutput</title>
	<atom:link href="http://www.muvik.de/tag/inputoutput/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.muvik.de</link>
	<description>open source - engineering - programming</description>
	<lastBuildDate>Wed, 28 Jul 2010 07:56:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Python Tutorial: Lesen von csv-Daten 2</title>
		<link>http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/</link>
		<comments>http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 08:10:15 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[InputOutput]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=823</guid>
		<description><![CDATA[Los gehts: Sehr schnell nach der Veröffentlichen des ersten Tutorials zum Lesen von csv-Daten mit Python, kamen von zwei Identi.ca-Teilnehmern der Hinweis auf das Python csv-Modul. Darauf möchte ich nun eingehen. Reaktionen auf das erste Tutorial Erstaunlicherweise kamen buchstäblich Sekunden nach der Veröffentlichung des ersten Tutorials von lutzgh und evgeni über identi.ca zwei Reaktionen in [...]]]></description>
			<content:encoded><![CDATA[<img class="cat-img-wide" alt="Tutorials auf die einfachste Weise" src="http://muvik.de/categorie_images/simple_tutorial.png" title="Tutorials auf die einfachste Weise" width="443" height="98" />
<p class="preview">Los gehts: Sehr schnell nach der Veröffentlichen des ersten Tutorials zum <a href="http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/">Lesen von csv-Daten mit Python</a>, kamen von zwei Identi.ca-Teilnehmern der Hinweis auf das Python csv-Modul. Darauf möchte ich nun eingehen.</p>
<p><span id="more-823"></span></p>
<h3>Reaktionen auf das erste Tutorial</h3>
<p>Erstaunlicherweise kamen buchstäblich Sekunden nach der Veröffentlichung des ersten Tutorials von lutzgh und <a href="http://identi.ca/evgeni">evgeni</a> über <a href="http://identi.ca/muvik">identi.ca</a> zwei Reaktionen in gleiche Richtung. Beide wiesen mich auf das <a href="http://docs.python.org/library/csv.html">csv-Modul</a> hin, welches genutzt werden kann, um diverse Daten zu importieren.</p>
<p>Natürlich kam mir sofort der Gedanke, warum ich das Modul nicht selber entdeckt habe. Ich muss zugeben, dass ich gar nicht gesucht habe. Mir ist auf Anhieb die Lösung mit den regulären Ausdrücken eingefallen. Doch, aus zwei Gründen bin ich glücklich, dass es nun so gekommen ist:</p>
<ol>
<li>Auf dieser Grundlage lässt sich ein weiterer netter Blog-Artikel schreiben <img src='http://www.muvik.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</li>
<li>Aus eins mach zwei: Ursprünglich als alleinstehendes Thema geplant, ist es nun in zunächst zwei verschiedenen Ausführungen vorhanden, die sich prächtig ergänzen. Dadurch ergibt sich eine breitere Grundlage und noch mehr Wissen für meine Leser.</li>
</ol>
<p>Also nur Vorteile für alle im Thema interessierten.
</p>
<h3>Das csv-Modul</h3>
<p>Das csv-Modul, welches es laut der Python-Dokumentationseite, seit der Version 2.3 gibt, unterstützt den Programmierer in seiner Arbeit beim Import und Export von Daten, welche tabellarisch im csv-Format gespeichert sind oder werden sollen. Dafür stellt es diverse Funktionen zur Verfügung, von denen ich die <em>reader()</em> und <em>writer()</em>-Funktionen als die für mich wichtigsten einstufe.</p>
<p>Sehr interessant ist die Möglichkeit mit Hilfe des csv-Moduls, Excel-Daten zu importieren und in Excel-Stil zu exportieren. Dazu muss lediglich ein bestimmter Parameter übergeben werden, der das Format definiert. Das scheint mir einer der größten Vorteile dieses Moduls zu sein.</p>
<h3>Datensatz und Import der Daten mit dem csv-Modul</h3>
<p>Wie bereits im ersten Tutorial wird auch hier der kleine Beispiel-Datensatz von <a href="http://www.walkingrandomly.com/?p=2654">walkingrandomly.org</a> übernommen:<br />
<code class="bash">header 1;<br />
header 2;<br />
1031,-948,-76, ,"12"<br />
507,635,-1148, ,"34"<br />
-1031,948,750, ,"45"<br />
-507,-635,114, ,"67"</code></p>
<p>
Diese Zeilen sollen nun mit dem csv-Modul in das Programm importiert werden und in drei verschiedenen Listen gespeichert werden. Dabei interessieren uns lediglich die Daten, die nicht Kopfdaten sind oder in Anführungszeichen stehen. Dazu  habe ich folgendes Python-Skript geschrieben:</p>
<pre class="brush:python">import csv
fileO = open('walking_example.dat','r')
csvreader=csv.reader(fileO, delimiter=',')
k= []; l = []; m = [];

for row in csvreader:
    if len(row) > 1:
        k.append(float(row[0]))
        l.append(float(row[1]))
        m.append(float(row[2]))

print(k,l,m)

fileO.close()</pre>
</p>
<h4>Schrittweise erklärt</h4>
<p>1.Zeile: Import des csv-Moduls</p>
<p>2.Zeile: Erstellen eines <em>file</em>-Objekts, welcher die Datei mit dem gezeigten Datensatz enthält.</p>
<p>3.Zeile: Einlesen der Daten von <em>fileO</em> mit der <em>reader()</em>-Funktion des csv-Moduls. Die Funktion erwartet mindestens einen Übergabeparameter und zwar das <em>file</em>-Objekt. Des Weiteren kann ein sogenannter Dialekt vorgegeben werden, welcher für sich die Struktur der csv-Daten definiert. Ein Dialekt könnte zum Beispiel Excel sein (<em>dialect=&#8217;excel&#8217;</em>). Weitere optionale Argumente wie das Trennungszeichen (<em>delimiter=&#8217;,&#8217;</em>) können hinzugefügt werden.</p>
<p>4.Zeile: Initialisieren der Listen, mit welchen weiter gerechnet werden soll.</p>
<p>7-10.Zeile: Das Auslesen der importierten Daten erfolgt an dieser Stelle. Die <em>reader()</em>-Funktion liest die Daten zeilenweise ein, dabei spielt es zunächst keine Rolle, ob es Kopfdaten sind oder nicht. Dieses Vorwissen muss bei der vorgestellten Methode vorhanden sein. Im Beispiel haben wir zwei Zeilen mit Kopfdaten, welche ignoriert werden sollen. Dies geschieht über die Abfrage der Länge der Liste <em>row</em>. Zuletzt werden in den Zeilen noch die Listen <em>k,l,m</em> um die ersten drei Spalten erweitert.</p>
<p>11-12.Zeile: Ausgabe der Listen und schließen des <em>file</em>-Objekts.</p>
<h3>Schlusswort</h3>
<p>Die Vorteile des csv-Moduls im Vergleich zu der Lösung mit regulären Ausdrücken liegen auf der Hand. Zum einen ist der Import effizienter und einfacher zu schreiben und zum anderen ist die Fehleranfälligkeit nicht so hoch.</p>
<p>Auf der anderen Seite stellen die regulären Ausdrücke eine viel allgemeinere Methode dar, Daten zu importieren. Hierbei muss lediglich die Struktur der Daten bekannt sein, Kopfzeilen werden automatisch ignoriert. Des Weiteren stellen zusätzliche Störungen in den Daten für reguläre Ausdrücke kein Problem dar.</p>
<p>Sollte ich jemals in die Verlegenheit kommen, mich zwischen den zwei Lösungen entscheiden zu müssen, so werde ich natürlich das dem Problem am besten angepasste nutzen. Das heißt: bei relativ sauberen Daten das csv-Modul und bei stark ungeordneten Daten die regulären Ausdrücke.</p>
<p>Nun hoffe ich auf konstruktive Kritik!</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/">Permalink</a> |
<a href="http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/#comments">keine Kommentare</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/&title=Python Tutorial: Lesen von csv-Daten 2">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/&title=Python Tutorial: Lesen von csv-Daten 2">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/&title=Python Tutorial: Lesen von csv-Daten 2">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/inputoutput/" rel="tag">InputOutput</a>, <a href="http://www.muvik.de/tag/python/" rel="tag">Python</a>, <a href="http://www.muvik.de/tag/tutorial/" rel="tag">Tutorial</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Tutorial: Lesen von csv-Daten</title>
		<link>http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/</link>
		<comments>http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 11:26:41 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[InputOutput]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=781</guid>
		<description><![CDATA[Los gehts: Tutorials, die nicht in die Kurztipp-Serie passen, weil sie zu groß, zu lang, zu wichtig sind oder ein besonderes Feature enthalten haben nun ebenfalls eine eigene Kategorie-Grafik. Diesmal geht es um das Einlesen beliebiger, durch ein Komma getrennter Daten aus sogenannten csv-Dateien (comma-seperated-values) in Python mit Hilfe der regulären Ausdrücke (regular expressions). Idee [...]]]></description>
			<content:encoded><![CDATA[<img class="cat-img-wide" alt="Tutorials auf die einfachste Weise" src="http://muvik.de/categorie_images/simple_tutorial.png" title="Tutorials auf die einfachste Weise" width="443" height="98" />
<p class="preview">Los gehts: Tutorials, die nicht in die Kurztipp-Serie passen, weil sie zu groß, zu lang, zu wichtig sind oder ein besonderes Feature enthalten haben nun ebenfalls eine eigene Kategorie-Grafik. Diesmal geht es um das Einlesen beliebiger, durch ein Komma getrennter Daten aus sogenannten csv-Dateien (comma-seperated-values) in Python mit Hilfe der regulären Ausdrücke (regular expressions).</p>
<p><span id="more-781"></span></p>
<h3>Idee und Intention</h3>
<p>Wie aus der Seitenleiste des Blogs entnommen werden kann, lese ich regelmäßig die Artikel des <a href="http://www.walkingrandomly.com">walkingrandomly.com</a> Blogs von Mike Croucher. Am 21. Mai 2010 schrieb Mike ein <a href="http://www.walkingrandomly.com/?p=2654">Matlab Tutorial</a>, dessen Inhalt es war, wie csv-Dateien in Matlab eingelesen werden können. Im Rahmen dieses Artikels ging er auf verschiedene Möglichkeiten ein, eine csv-Datei zu importieren.</p>
<p>Begonnen hat er mit einer einfachen zu importierenden Datei, worin die Daten ohne Ausnahmen durch eine Komma getrennt waren. Richtig interessant wurde es beim Import von Daten aus einer unordentlich definierten csv-Datei. Das Beispiel stammte von einem Leser seines Blogs und soll hier ebenfalls verwendet werden. </p>
<h3>Der Datensatz</h3>
<p>Es lässt sich unendlich lange darüber unterhalten, wie sinnvoll oder sinnlos es ist, innerhalb einer Datei mit csv-Daten weitere Daten zu integrieren, welche nicht durch Kommas getrennt werden und eventuell andere Datentypen sind. Abgesehen davon ist das Beispiel, welches auch Mike verwendet folgendes:</p>
<p><code class="bash">header 1;<br />
header 2;<br />
1031,-948,-76, ,"12"<br />
507,635,-1148, ,"34"<br />
-1031,948,750, ,"45"<br />
-507,-635,114, ,"67"</code></p>
<p>Da das Ziel beim Import der Daten ist, mit ihnen weiter zu rechnen oder zu plotten, ergeben sich für mich zwei Herausforderungen, bei dem gegebenen Datensatz:</p>
<ol>
<li>Eine straight-forward Lösung bricht sich bereits an der ersten Zeile das Bein, an der ersten Kopfzeile. Also müssen eine vorgegebene Anzahl an Zeilen beim Importieren ignoriert werden können.</li>
<li>Da die letzte Spalte nicht nur durch ein Komma getrennt ist, sondern in Anführungszeichen steht, soll angenommen werden, dass es reiner Text ist und soll beim Import ignoriert werden.</li>
</ol>
<p>Damit wären die Stolpersteine lokalisiert und können aus dem Weg geräumt werden.</p>
<h3>Reguläre Ausdrücke (regular expressions, kurz: regex)</h3>
<p>Es gibt mehrere Möglichkeiten das beschriebene Problem anzugehen und die regulären Ausdrücke stellen in meinen Augen nicht die schlechteste dar. Zum einen wird aus den zwei Herausforderungen nur noch eine und zum anderen ist die Lösung sehr schnell auf dem Tisch und sieht elegant aus. Sollte sich die Struktur der csv-Daten noch ändern, stellt es für die Lösung mit regulären Ausdrücken kein großes Problem dar. Es muss lediglich eine Zeile angepasst werden.</p>
<p>Reguläre Ausrücke habe ich persönlich bisher sehr sporadisch gebraucht, würde aber dennoch folgendes Vorgehen vorschlagen:</p>
<ol>
<li>Klären der Struktur der Daten</li>
<li>Erkennen eines Musters</li>
<li>Definition des Musters in regulären Ausdrücken</li>
<li>Implementierung des Rahmenprogramms: öffnen einer Datei, ausgeben der Ergebnisse &#8230;</li>
</ol>
<p>Die Struktur des Datensatzes haben wir schon geklärt: es ist ein Datensatz, dessen Elemente durch Kommata getrennt sind. Die zwei Kopfdateien interessieren uns hierbei nicht, die sollen nicht importiert werden.
</p>
<p>Das Muster ergibt sich, indem logische Bereiche von einer Zeile betrachtet werden:<br />
<code class="bash">-1031,948,750, ,"45"</code><br />
Zum Einen ist zu bemerken, dass alle Zahlen ganze Zahlen sind. Zudem ist ein Minus auch erlaubt. Also ergibt sich aus der Überlegung folgendes Muster: drei aufeinander folgenden Integer-Zahlen, die durch jeweils ein Komma getrennt sind und evt. ein Minus vor der Integer-Zahl.</p>
<p>Daraus lässt sich nun der folgende einfache reguläre Ausdruck ableiten:<br />
<code class="bash">(-?[0-9]*),(-?[0-9]*),(-?[0-9]*),.*</code><br />
Es sei angemerkt, dass auch an dieser Stelle viele Wege nach Rom führen. Drei Programmierern fallen bestimmt spontan neun verschiedene reguläre Ausdrücke ein, die alle die korrekte Lösung liefern.
</p>
<h3>Reguläre Ausdrücke in Python</h3>
<p>Der glückliche und aktive Linux Benutzer kann reguläre Ausdrücke in sehr vielen Programmen und Tools anwenden. Als Beispiele seien nur die Tools <a href="http://de.wikipedia.org/wiki/Grep">grep</a> und <a href="http://de.wikipedia.org/wiki/Awk">awk</a> genannt.</p>
<p>Ich möchte nicht behaupten, dass die meisten Bücher, jedoch sehr viele erklären reguläre Ausdrücke in Kombination mit der Skriptsprache <a href="http://de.wikipedia.org/wiki/Perl_%28Programmiersprache%29">Perl</a>. In Python lassen sich die regulären Ausdrücke doch ebenso leicht verwenden. Dazu muss lediglich das Modul <em>re</em> importiert werden:<br />
<code class="bash">import re</code> Damit sind wir mit einer mächtigen Waffe ausgestattet.</p>
<h3>Import der csv-Daten und Ausgabe der Listen (Arrays)</h3>
<p>Gehen wir es an und importieren den Datensatz mit den unordentlich formatierten Daten. Dazu schlage ich folgendes kleines Python-Skript vor:</p>
<pre class="brush:python">import re

# define a pattern for matching the needed data

fileO = open('walking_example.dat','r')
search_data = fileO.readlines()

fileO.seek(0,0)

print("Following data will be parsed:\n")
print(fileO.read())

fileO.close()

pattern = '(-?[0-9]*),(-?[0-9]*),(-?[0-9]*),.*'
r = []; s = []; t = [];

for line in search_data:
    found = re.search(pattern, line)
    if found:
        r.append(float(found.group(1)))
        s.append(float(found.group(2)))
        t.append(float(found.group(3)))

print("\nThe parsed lists:\n")
print(r,s,t)</pre>
</p>
<h4>Schrittweise erklärt:</h4>
<p>1.Zeile: Zu Beginn wird das Modul zur Verwendung regulärer Ausdrücke importiert.</p>
<p>5.Zeile: Es wird ein <em>file</em>-Objekt angelegt, welches die Datei mit dem Datensatz enthält. Die Funktion <em>open</em> erhält im ersten Übergabeparameter die Datei inklusive dem Pfad und im zweiten die Option &#8216;r&#8217;, was bedeutet, dass nur gelesen werden soll. Da in meinem Fall die csv-Datei sich im selben Ordner befindet, wie das Python-Skript, muss lediglich der Dateiname angegeben werden.</p>
<p>6.Zeile: Um die Daten aus dem <em>file</em>-Objekt zu verwenden, werden sie zeilenweise eingelesen und in der Variablen <em>search_data</em> gespeichert.</p>
<p>7-11.Zeile: Dieser Abschnitt ist optional. Zunächst wird die Position im <em>file</em>-Objekt wieder auf den Ausgangszustand zurückgesetzt, damit der Datensatz erneut mittels <em>read()</em> gelesen und dadurch einfach mit <em>print()</em> ausgegeben werden kann. Dies alles dient nur der leichten Kontrolle des regulären Ausdrucks.</p>
<p>13.Zeile: Das <em>file</em>-Objekt wird geschlossen.</p>
<p>15.Zeile: Der bereits vorgestellte reguläre Ausdruck wird in der Variable <em>pattern</em> gespeichert.</p>
<p>16.Zeile: Initialisierung leerer Listen für die drei Spalten aus den Datensatz.</p>
<p>19.Zeile: Anwendung des regulären Ausdrucks für jede Zeile aus <em>search_data</em>, was mit Hilfe der <em>for</em>-Schleife aus Zeile 18 bewerkstelligt wird. Hierzu wird die Funktion <em>search</em> aus dem <em>re</em>-Modul verwendet. <em>search</em> erhält als erstes Argument das Muster und als zweites die zu untersuchende Zeile des Datensatzes.</p>
<p>21-23.Zeile: Wenn <em>re.search</em> etwas gefunden hat, dann werden die Teile, welche im regulären Ausdruck in runden Klammern stehen in die drei Listen <em>r,s,t</em> geschrieben. Vor dem eigentlichen Anhängen an die Liste mittels <em>append</em> wird der Inhalt in <em>float</em>-Zahlen umgewandelt.</p>
<p>26.Zeile: Zu guter Letzt werden die Listen zur Kontrolle ausgegeben.</p>
<h3>Ergebnis und Kontrolle</h3>
<p>Die Arbeit ist getan, jetzt gilt es nur noch die Lorbeeren zu pflücken.</p>
<p>Dazu schauen wir uns an, was das Skript in der Shell ausgibt:<br />
<code class="bash">Following data will be parsed:<br />
header 1;<br />
header 2;<br />
1031,-948,-76, ,"12"<br />
507,635,-1148, ,"34"<br />
-1031,948,750, ,"45"<br />
-507,-635,114, ,"67"<br />
The parsed lists:<br />
([1031.0, 507.0, -1031.0, -507.0], [-948.0, 635.0, 948.0, -635.0], [-76.0, -1148.0, 750.0, 114.0])</code><br />
Es ist ganz leicht zu erkennen, dass das kleine Programm für diesen Fall richtig funktioniert hat.</p>
<h3>Schlusswort</h3>
<p>Reguläre Ausdrücke sind ein mächtiges Instrument, welches jedoch aufgrund der etwas undurchsichtigen Syntax oft als zu umständlich abgelehnt werden. Aus meiner Sicht lohnt sich eine kurze Einarbeitung in die Syntax, wenn öfter mal bestimmte Bereiche eines Datensatzes extrahiert werden müssen, was bei mir der Fall ist.</p>
<p>An dieser Stelle ein Dankeschön an Mike vom walkingrandomly.com-Blog für die Steilvorlage.</p>
<p>Weiterhin würde mich interessieren, wie meine Leser an die Sache herangegangen wären und welche Erfahrungen sie gemacht haben in Bezug auf reguläre Ausdrücke.</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/">Permalink</a> |
<a href="http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/#comments">ein Kommentar</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/&title=Python Tutorial: Lesen von csv-Daten">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/&title=Python Tutorial: Lesen von csv-Daten">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/&title=Python Tutorial: Lesen von csv-Daten">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/inputoutput/" rel="tag">InputOutput</a>, <a href="http://www.muvik.de/tag/python/" rel="tag">Python</a>, <a href="http://www.muvik.de/tag/tutorial/" rel="tag">Tutorial</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

