Daten aus Datei extrahieren und als csv datei wiedergeben

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
Jens_J.
User
Beiträge: 12
Registriert: Montag 23. November 2015, 20:21

Hallo,

Ich hänge gerade etwas an einem Problem.

Ich möchte Daten aus einer Textdatei extrahieren und daraus eine csv-datei machen. Das Problem ist, dass ich es nicht hinbekomme, dass es wirklich in verschiedenen Spalten dargestellt wird. Ich habe schon verschiedenes versucht. Mein Grundcode sieht so aus:

Ziel ist es die aus der Datei extrahierten Daten in der linken Spalte der Ausgabedatei und "222", "999" in der rechten darzustellen. (der Einfachheit nur 2 jeweils)

f=open("Text123.log")
zeile= f.readline()

datei = open("Ausgabe.csv", "w")

for zeile in f:
if "888" in zeile and "222" in zeile:
datei.write("%.2f"% (float(zeile[0:9])-53.2436)+"," + " 222" +"\n")
elif "888" in zeile and "999" in zeile:
datei.write("%.2f"% (float(zeile[0:9])-53.2436)+"," + " 999" +"\n")
elif "MYLOG" i

datei.close()
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

zum Schreiben von CSV-Dateien gibt es in der Python Standardinstalltion das CSV-Modul. Das brauchst du nicht von Hand zusammen bauen.
dass es wirklich in verschiedenen Spalten dargestellt wird.
Zeig' doch mal, was bei dir rauskommt. CSV kennt in dem Sinne ja keine Spalten. Die Werte / Daten werden durch ein Komma getrennt mehr ist das nicht. Die (sichtbaren) Spalten bekommst du ja erst, wenn du die Daten z.B. in LibreOffice Calc oder Excel importierst.

Und zeig' doch mal bitte ein paar Zeilen der Ausgangsdatei. Anhand des obigen Codes lässt sich schlecht erahnen, wie die Ausgangsdaten aussehen.

Gruß, noisefloor
Jens_J.
User
Beiträge: 12
Registriert: Montag 23. November 2015, 20:21

Hi,
Danke für die Antwort.

Also wenn ich die Datei mit Excel öffne wird einfach alles, sammt Komma, in der ersten Spalte dargestellt. Also so:

00:00, 222|Ende der Spalte
12:42, 999|Ende der Spalte
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

hast du mal geprüft, ob deine Einstellungen beim Import von CSV nach Excel korrekt sind? Man kann den Feldtrenner ja vorgeben.

Gruß, noisefloor
BlackJack

@Jens_J.: Du hast Excel beim laden der Datei auch gesagt dass das Komma das Trennzeichen ist‽ Das ist ja in der Deutschen Spracheinstellung sonst das Trennzeichen für den gebrochenen Teil bei Dezimalzahlen, weshalb standardmässig das Semikolon als Spaltentrenner von Deutschen Excel-Installationen genommen wird.
Jens_J.
User
Beiträge: 12
Registriert: Montag 23. November 2015, 20:21

Danke für den Hinweis darauf bin ich selbst nicht gekommen.

Also war es scheinbar nicht naiv von mir einfach so die Daten mit Komma zu trennen.

Leider kenne ich mich mit Excel nicht aus und weiß nicht wie ich es sagen soll, dass Komma als Trennzeichen verwendet werden soll.


Edit: ok wenn ich ein Semikolon anstatt Komma verwendet klappt es. Ärgerlich sich wegen einer solchen Kleinigkeit so lange den Kopf zu zerbrechen. Aber ist es dann noch CSV?
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

der Name "comma separated value" ist wohl historisch bedingt. Gängiger ist IMHO, dass man so wie so ein Semikolon als Feldtrenner verwendet. Warum das u.a. Sinn macht, hat BlackJack ja schon erklärt.

Im Prinzip könntest du jedes (ASCII-) Zeichen als Feldtrenner benutzen - so lange du dem lesenden Programm mitteilst, was der Feldtrenner ist. Wobei man nichts desto trotz bei den gängigen Feldtrennern bleiben sollte, also ; , : | \t

Wenn du zum Speichern einer CSV-Datei aus Python heraus den csv-Modul nutzt hast du u.a. den Vorteil, dass du einmal das Trennzeichen setzt (den "delimiter") und der dann automatisch verwendet wird. Am besten einmal die Doku des csv-Moduls lesen.

CSV als Dateiformat ist auch bei Wikipedia ganz gut beschrieben.

Gruß, noisefloor
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Jens_J. hat geschrieben:Edit: ok wenn ich ein Semikolon anstatt Komma verwendet klappt es. Ärgerlich sich wegen einer solchen Kleinigkeit so lange den Kopf zu zerbrechen. Aber ist es dann noch CSV?
Falls Du die CSV-Dateien selbst mit einem Skript generiest (und dannach hört sich das an), auch hier nochmal der Hinweis, dafür besser fertige Bibliotheken zu verwenden. Damit ist sichergestellt, dass da kein falsches CSV rauskommt und Deine Daten auch wieder einlesbar sind (bei CSV gibt es ein paar quoting-Regeln zu beachten). CSV-Bilbiotheken gibt es für alle halbwegs verbreiteten Programmiersprachen.
Antworten