CSV verarbeiten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Travis83
User
Beiträge: 3
Registriert: Dienstag 10. Dezember 2013, 22:40

Hallo meine Lieben,

ich hänge seit Tagen an einem recht "simplen" Programmierproblem das mir den Schlaf raubt! Ich möchte aus einer txt. Datei ("Test.txt") die sehr viele Informationen über Fahrzeuge enthält nur ganz bestimmte in einer Tabellenform (csv) rausschreiben.

Der Input ist:

Code: Alles auswählen

f = file("Test.txt", "r")
for line in f: 
    print line 
f.close()
Auf dem Terminal erhalte ich als Ausgabe:

G-Nr.(DMS-Lagernr.): MX228048

BMW 520d Touring, Dienstwagen, 1995ccm, 4 Zylinder, 135 KW, EZ: 16.07.2013, 9902 km, Anzahl Vorbesitzer: 1, Fahrgestellnummer: WBA5J31040D067208, Standplatz MXF/VORLAUF/Vorlauf (automatisch)

Alpinweiss uni, Leder Dakota Schwarz/Schwarz, Auto Start Stop Funktion, Brake Energy Regeneration, Automatic Getriebe Steptronic, Lenkradheizung, Alarmanlage, Automatische Heckklappenbetätigung...


G-Nr.(DMS-Lagernr.): MX228053

BMW 330d xDrive Touring, Dienstwagen, 2993ccm, 6 Zylinder, 190 KW, EZ: 29.08.2013, 19018 km, Anzahl Vorbesitzer: 1, Fahrgestellnummer: WBA3L31020F994231, Standplatz MXF/VORLAUF/Vorlauf (automatisch)

Saphirschwarz metallic, Leder Dakota Schwarz/Schwarz, Sport-Automatic Getriebe Steptronic, Adaptives Fahrwerk, Variable Sportlenkung, Lenkradheizung, Multifunktion für Lenkrad, Dachreling schwarz, Rückfahrkamera, Alarmanlage, Komfortzugang, Interieurleisten Aluminium Längsschliff, Armauflage vorn. verschiebbar, Akzentleisten schwarz hochglänzend, Panorama Glasdach, Sonnenschutzverglasung, Innen- und Außenspiegel automatisch abbl, Innenspiegel automatisch abblendend, Raucherpaket, Sitzverstellung. elektrisch mit Memory f, Durchladesystem. 40:20:40 teilbar, Sportsitze für Fahrer und Beifahrer, Lordosenstütze für Fahrer und Beifahrer, Ablagenpaket, Sitzheizung für Fahrer und Beifahrer, Sitzheizung für Fondsitze, Fernlichtassistent, Active Protection, Driving Assistant...

und noch ca 400 mehr

Aus den ganzen Daten benötige ich nur die Informationen in (Tabellen) Form :

ID G-Nr. Modell Preis
1 MX228053 BMW 330d 24.000,-
2 MX228048 BMW 520d 33.000,-
...


Ich wäre für jede Hilfe sehr dankbar, ich habe bisher fast nur mit Arrays gearbeitet aber txt und cvs sind mir total unbekannt, in den ganzen Foren konnte ich bisher nichts nützliches finden oder sehen :(

LG
Zuletzt geändert von Leonidas am Donnerstag 17. Juli 2014, 00:37, insgesamt 1-mal geändert.
Grund: Code in Python-Tags gesetzt. Titel angepasst.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Travis83 hat geschrieben:ich habe bisher fast nur mit Arrays gearbeitet
Dann fang mal an, Dich mit Hilfe eines Tutorials mit String-Funktionen und Listen vertraut zu machen.
BlackJack

@Travis83: Ich würde mal sagen es ist unmöglich Preisinformation aus Daten zu ziehen die gar keine Preisinformationen enthalten. ;-)

Mir ist auch nicht so ganz klar wie Du die Modellinformation extrahierst. Klar, bei den beiden Fahrzeugen im Beispiel ist ein Muster zu erkennen, aber geht das tatsächlich für die ganzen 400 Datensätze auf diese Weise?

Ansonsten werfe ich noch den allgemeinen Tipp `itertools`-Modul in den Raum, und zerlege das Problem in kleinere Teilprobleme, und die Teilprobleme wieder in kleinere Teilprobleme, bis sich die zerlegten Probleme einfach mit Code lösen lassen. Und aus den Lösungen zu den Teilproblemen, lässt sich dann eine Lösung der zerlegten Probleme bis hin zum Gesamtprogramm zusammensetzen. Beispiel: Problem eine Datei mit Abschnitten für 400 Fahrzeuge zu verarbeiten, kann man zerlegen in das Verarbeiten eines Abschnitts für ein Fahrzeug, und das Aufteilen der Eingabedaten in Abschnitte pro Fahrzeug und das Aufrufen der Funktion für das verarbeiten eines Fahrzeugs in einer Schleife.
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

Hallo,

für CSV-Dateien gibt es im Standard schon ein Modul.
Hier mal ein Link auf die Doku in 3.2 (ggfs auf die verwendete Pythonversion anpassen)
https://docs.python.org/3.2/library/csv.html

Ansonsten könnte man (Bandwurm)Strings noch per 'slicing' oder mit der Methode 'split' zerpflücken (siehe Tutorial bzw Doku zu Strings)

Hier ein Link auf das Tutorial in der Pythondoku, wo man sich grundlegendes Wissen über Python aneigenen kann:
https://docs.python.org/3.2/tutorial/index.html

Viel Spaß und natürlich Erfolg!
Antworten