Seite 1 von 2

CSV in EXCEL

Verfasst: Samstag 13. März 2010, 16:25
von kurtelic
Hallo an alle,
ich bin neu hier und muss mich seit ein paar Tagen mit Python besch�ftigen.
Inzwischen habe ich einige von euren Beitr�gen gelesen, komme aber nicht weiter.

Ich muss ein .csv Datei lesen und anschlie�end daraus ein .xls Datei erzeugen.

Ich lese die csv. Datei mit folgendem code aus:

Code: Alles auswählen

import csv
	reder = csv.reader(open("Test_OR.xls","rb"), delimiter='\t')
	for row in reder:
		print row
und die ausgabe sieht so aus:

['NAME', 'FIRSTNAME', 'NICKNAME', '']
['', 'Datei_Name.pdf', ' ']
['', '', '', '']
['NAME', 'FIRSTNAME', 'NICKNAME', '']
['', 'Datei_Name_2.pdf', ' ']
.
.
.
['', 'Datei_Name_n.pdf', ' ']
[ '', '', '', 'TEST1', '', 'TEST2', '', '', '', '', '', 'TEST3', '', '', '', '',]
['NAME', 'FIRSTNAME', 'NICKNAME', 'Zeit', 'Neue_Zeit', 'Geschwindigkeit', 'WEG', 'GPS', 'Zeit2', 'X_Koor', 'Y_Koor', 'Z_Koor', ]
['', 'Datei_Name_n+1.pdf', '156', '44,676', '5', '-0,8', '6,999', '0,90', '']
['', 'Datei_Name_n+2.pdf', '675', '3,67', '22', '-0,56', '0,0', '9,34', '']
['', '', '', '']


['', '', '', 'TEST1', '', 'TEST2', '', 'TEST3... sind die Kategorien

TEST1 ist eine kategorie und darunter kommen z.B. 'NAME', 'FIRSTNAME', 'NICKNAME' rein
TEST2 ist eine NEUE Kategorie und darunter kommen z.B. 'Zeit', 'Neue_Zeit', 'Geschwindigkeit', 'WEG'
usw. und dann zu jeder unterkategorie kommt ein Wert wie z.B. ['', 'Datei_Name_n+1.pdf', '156', '44,676', '5', '-0,8...

Die Excel-Python.pdf habe ich schon durchgemacht, finde aber auch nicht wirklich weiter....


Mein Code sieht so aus, funktioniert aber nicht wirklich. Es w�re mir auch sehr Wichtig das es alles Dynamisch Funktioniert, d.h. falls neue Werte noch dazu kommen, ausgelesen werden und in Excel gespeichert werden.


Code: Alles auswählen

import csv
import sys
from os import *

# Datei �ffnen und einen csv-reader initialisieren
source = file("test.xls", "rb")
reader = csv.DictReader(source, delimiter='\t')

# csv-writer initialisieren und die Kopfzeile schreiben
targetHandle = file("test_output.xls", "wb")
writer = csv.DictWriter(target,["NAME", "FIRSTNAME", "NICKNAME"], delimiter='\t')
writer.writecol({"NAME" : "NAME", "FIRSTNAME" : "FIRSTNAME", "NICKNAME" : "NICKNAME"})
                
for col in reader:

    # Zugriff auf die Felder der jeweiligen Zeilen
    name = col['NAME']
    firstname = col['FIRSTNAME']
    nickname = col['NICKNAME']

    # Tausche Namen und Vornamen und entferne Leerzeichen
    data = {
        'NAME': firstname.replace(' ', ''),
        'FIRSTNAME': name.replace(' ', ''),
        'NICKNAME': nickname.replace(' ', '')
    }

    writer.writerow(data)

# Aufr�umen
source.close()
target.close()

exit()
Ich habe noch ein anderen Code geschrieben, wo ich aber die Kategorie Namen Manuel eingebe und die Zellen zusammenfasse. Ebenso habe ich auch f�r die Unterkategorien gemacht, finde es aber nicht so besonders professionell und sch�n. Ich hoffe Ihr k�nnt mir helfen...


Ich bedanke mich an eure Hilfe in voraus!!!

Re: CSV in EXCEL

Verfasst: Samstag 13. März 2010, 16:40
von ms4py
kurtelic hat geschrieben:Die Excel-Python.pdf habe ich schon durchgemacht, finde aber auch nicht wirklich weiter....
Du meinst aber nicht wirklich die PDF von hier:
http://www.python-excel.org/
In der steht alles ausführlich beschrieben!

Verfasst: Samstag 13. März 2010, 17:33
von BlackJack
@kurtelic: Mal so am Rande: Du solltest für CSV-Dateien nicht die Dateiendung '.xls' verwenden. Das ist irreführend.

Was ist eigentlich das genaue Problem?

Verfasst: Sonntag 14. März 2010, 12:51
von kurtelic
Hallo,

@ice2k3: Ja ich meine die PDF. Es ist gut für manche andere Funktionen wie z.B. die Zellen "Einfrieren" usw. aber für einlesen ist nicht so gut. Ich habe alle Beispiele durchgemacht!

@BlackJack:
Es ist ein Problem, weil ich in eine Gruppe Arbeite und die anderen nicht auf .xls verzichten wollen. Es hat mich auch gestört aber da manche auch mit Python etwas machen, haben die zu mir gesagt das Python nicht auf solcher Sachen Empfindlich sei und ich soll es so machen...


Mein Problem ist einlesen von Daten. Ich weiß nicht wie ich die Daten einlese und dann in richtige Zellen reinschreibe.


Danke

Verfasst: Sonntag 14. März 2010, 13:16
von Hyperion
kurtelic hat geschrieben: Mein Problem ist einlesen von Daten. Ich weiß nicht wie ich die Daten einlese und dann in richtige Zellen reinschreibe.
Das ist noch viel zu allgemein! (Nebenbei hast Du das Einlesen doch schon gelöst!?!)

Was sind denn "richtige Zellen"? Wodurch werden sie charakterisiert? Wie sieht die Datenstruktur aus? Versuche das möglichst allgemein zu halten. Dein Beispiel oben ist schon viel zu konkret und komplex. Versuche das Problem so klein wie möglich darzustellen.

Verfasst: Sonntag 14. März 2010, 13:56
von BlackJack
@kurtelic: Ich weiss nicht so recht wie ich Deine Antwort interpretieren soll, oder ob Du meinen Einwand richtig verstanden hast. Du hast Dateien mit der Dateiendung '.xls' in denen aber anscheinend Daten im CSV-Format gespeichert sind. Das solltest Du nicht machen, denn bei '.xls' erwartet man das nicht, denn da sind für gewöhnlich Daten im Excel-Format drin. Das ist als wenn Du eine Textdatei mit der Endung '.jpg' abspeicherst -- äusserst irreführend, weil eben draussen "Bild" draufsteht, drinnen aber Text ist.

Verfasst: Sonntag 14. März 2010, 14:13
von ms4py
kurtelic hat geschrieben: @ice2k3: Ja ich meine die PDF. Es ist gut für manche andere Funktionen wie z.B. die Zellen "Einfrieren" usw. aber für einlesen ist nicht so gut. Ich habe alle Beispiele durchgemacht!
Häh?! Du sollst ja auch das Kapitel zum Schreiben durcharbeiten und nicht das zum Einlesen. Ich habe gedacht, du willst CSV einlesen und in XLS schreiben?!
Falls das deine Aufgabe ist, dann verwendest du den CSV-Reader, den du bisher schon verwendest, zum Einlesen und zum Schreiben gehst du so vor, wie in der PDF beschrieben.

Ansonsten beschreibst du noch mal klar und deutlich deine Aufgabe und Lösungsansätze. Hier sind nämlich wirklich *alle* von deinen Posts ziemlich verwirrt. :?

Verfasst: Montag 15. März 2010, 00:39
von kurtelic
@Alle: Danke für eure mühe! Ich weiß das ich die Leute leicht verwirre mit meine Erklärungsweise! :-)

Es ist so, dieses Code das ich geschrieben habe funktioniert irgendwie nicht...ich kann irgendwie nichts einlesen?!?

@Hyperion: Ich werde es versuchen nochmal kurz zu fassen.

"Richtige Zelle" heißt eine Zelle mit dem Wert Spalte und Reihe z.B. A1
Man könnte z.B. ein Satz "Alle meine Entchen" in eine Zelle schreiben aber den Text würde man auch über mehreren Zellen sehen oder auch
"Alle" in A1
"meine" in B1
"Entchen" in C1
Schreiben. Ich brauche die zweite Möglichkeit. Die Werte die da drin enthalten sind, müssen weiter verarbeitet werden. Die enthalten Integer, Double und String Daten.
Ich hoffe das jetzt etwas klarer ist.


Kann man dieses Teil nicht irgendwie allgemein lösen? Ich hätte es gern allgemein,d.h. das ich die Ueberschriften nicht eingebe,sondern Python liest es aus der .xls?

Code: Alles auswählen

writer = csv.DictWriter(target,["NAME", "FIRSTNAME", "NICKNAME"], delimiter='\t')
writer.writecol({"NAME" : "NAME", "FIRSTNAME" : "FIRSTNAME", "NICKNAME" : "NICKNAME"})
@BlackJack:
Ja danke dir auch, ich habe es verstanden, werde dann mit denn anderen reden und bitten das ich die Datei in .csv bekomme.
Die haben mir gesagt das es egal ist,python kann es auch so gut verstehen und richtig interpretieren.

@ms4py: :-) Habe ich auch alle beide, funktioniert einlesen trotzdem irgendwie nicht...

Verfasst: Montag 15. März 2010, 08:27
von BlackJack
@kurtelic: Ich glaube so kommen wir nicht weiter.
kurtelic hat geschrieben:Es ist so, dieses Code das ich geschrieben habe funktioniert irgendwie nicht...ich kann irgendwie nichts einlesen?!?
Was soll man denn dazu sagen!? Wahrscheinlich machst Du irgendwie was falsch.

"Funktioniert nicht" ist keine Fehlerbeschreibung bei der man helfen kann, insbesondere wenn der Quelltext der irgendwie nicht funktioniert gar nicht bekannt ist.

Verfasst: Montag 15. März 2010, 09:14
von Käptn Haddock
Nur so am Rande: Excel importiert ganz vorzüglich csv-Dateien ganz ohne etwas zu tun. Wie deine Inhalte dann Feldern und Typen zugeordnet werden, ist allein eine Sache des eingestellten Feldtrenners und des String-Begrenzers. Du kannst sogar die Position des importierten Bereichs in der Tabelle wählen und das Encoding auswählen, AFAIR.
Naja, vielleicht versteh ichs aber auch nicht worum es geht.

Gruß UWe

Verfasst: Montag 15. März 2010, 13:37
von mkesper
Hallo,

Habe nochmal versucht, deinen Code zu verstehen. Du vermischst irgendwie zeilen- und reihenweises Vorgehen. Versuche doch, einfach, für jede Zeile (row), die du einliest, wieder eine Zeile zu schreiben.

Verfasst: Montag 15. März 2010, 23:11
von kurtelic
Könnten wir es dann so machen.
Vergessen wir alles was ich oben geschrieben habe.
Sagen wir mal, ihr bekommt ein .csv Datei mit o.g. Struktur.
Ihr wollt ein Excel Datei bilden mit der 1. Reihe Überschrift und darunter die Messwerten.
Wie würde der Quellcode aussehen?

Verfasst: Dienstag 16. März 2010, 00:17
von cofi
Nur um das klarzustellen: Meinst du eine CSV, oder eine Excel-Datei?

Verfasst: Dienstag 16. März 2010, 00:39
von kurtelic
Input:CSV
Output:XLS

:D

Verfasst: Dienstag 16. März 2010, 11:39
von ms4py
kurtelic hat geschrieben:Könnten wir es dann so machen.
Vergessen wir alles was ich oben geschrieben habe.
Sagen wir mal, ihr bekommt ein .csv Datei mit o.g. Struktur.
Ihr wollt ein Excel Datei bilden mit der 1. Reihe Überschrift und darunter die Messwerten.
Wie würde der Quellcode aussehen?
Das ist wohl echt eine Frechheit! Du klatschst uns hier fast 1:1 den Quelltext aus einem Tutorial hin ( http://www.casa-rock.de/2008/09/30/pyth ... er-freund/ ), behauptest die python-excel.pdf *komplett* durchgearbeitet zu haben ohne dass in deinen Quelltexten auch nur der geringste Ansatz davon zu finden ist und stellst dann so eine Anfrage.
Vermutlich verstehst du keine einzige Zeile von dem hier gezeigten Code!

Ich verweise hier noch einmal ganz deutlich auf http://www.python-forum.de/topic-1689.html und werde Anfragen von dir in Zukunft ignorieren...

Verfasst: Dienstag 16. März 2010, 13:56
von kurtelic
Entschuldigung!!! Aber mal ganz langsam!!!!
Ich habe dieses Code absichtlich kopiert! Es geht es darum dass ich ein Code auf dem ich eigentlich arbeite aus bestimmten gründen nicht veröffentlichen darf!!!!
Aus Zeitmangel habe ich ein anderen ähnlichen Code genommen und eine ähnliche zu meine Ausgabe geschrieben!!!

Und wenn du oder weiß ich nicht wer Antworten will, ist es ok, aber weiß nicht dann wozu es überhaupt Foren gibt?!?!
Ich dachte es wäre der Sinn, jemand zu helfen und nicht gegen jemand zu arbeiten!

Hätte ich gewusst woran es liegt oder wie ich mein Problem am besten lösen kann würde ich bestimmt nicht eure und meine Zeit in Anspruch nehmen.

Danke

Verfasst: Dienstag 16. März 2010, 13:57
von mkesper
Auf die Schnelle, jedoch wenigstens minimal getestet:

Code: Alles auswählen

from __future__ import with_statement
import sys
import os
import csv
import xlwt

def main(file_name):
    with open(file_name, 'rb') as infile:
        csv_reader = csv.DictReader(infile, delimiter='\t')
        base_name = os.path.splitext(file_name)[0]
        with open("%s.xls" % base_name, 'wb') as outfile:
            wb = xlwt.Workbook()
            ws = wb.add_sheet(base_name)
            # Erste Zeile fixieren (nach xlwt Doku)
            ws.set_panes_frozen(True)
            ws.set_horz_split_pos(1)
            ws.set_remove_splits(True)
            for col, category in enumerate(csv_reader.fieldnames):
                ws.write(0, col, category)
            for row, line in enumerate(csv_reader):
                for col, category in enumerate(line):
                    ws.write(row + 1, col, line[csv_reader.fieldnames[col]])
            wb.save(outfile)
                    
if __name__ == '__main__':
    main(sys.argv[-1])

Verfasst: Dienstag 16. März 2010, 14:08
von kurtelic
DANKE DANKE DANKE mkesper!!!
Wenigstens jemand versteht mein Problem! ;)
Ich werde es mir jetzt anschauen und Testen.
Über Ergebnissen werde ich dir schreiben!

Danke nochmal!!!

P.S. Die Sache mit "Zellen Einfrieren" habe ich eigentlich schon realisiert, ebenso bestimmte Zellen Einfärben und mehrere Zellen in eine zusammenfassen. Es stellt sich aber jetzt die Frage ob man hier auch wie bei Makros die Filter einsetzen kann? Da muss ich zugeben das ich es im Excel-Python.pdf s.49 nicht ganz verstanden habe was es gemeint ist.
Kann man z.B. nach bestimmtem Name oder Wert Filtern? Versteht ihr was ich meine?

Verfasst: Dienstag 16. März 2010, 17:59
von ms4py
kurtelic hat geschrieben:Und wenn du oder weiß ich nicht wer Antworten will, ist es ok, aber weiß nicht dann wozu es überhaupt Foren gibt?!?!
Ich dachte es wäre der Sinn, jemand zu helfen und nicht gegen jemand zu arbeiten!
Ein Forum ist dazu da, anderen auf ihre Fehler hinzuweisen und ihnen auf die Sprünge zu helfen, falls es mal hängt, damit sie ihre Arbeit selbst erledigen können und nicht, damit man ihnen die Arbeit abnimmt. Vor allem wenn es, wie in deinem Fall, so aussieht, als ob der Fragesteller null Motivation und Eigeninitiative in das Problem steckt.

Die Glaubwürdigkeit hinter deiner Erklärung lassen wir einmal dahingestellt, oder willst du uns vielleicht erläutern, was an einem Skript, das CSV einliest, so geheimhaltungswürdig ist?

Verfasst: Dienstag 16. März 2010, 20:18
von kurtelic
und wer bist überhaupt du???dass ich mich bei dir rechtfertigen muss!!!
Ist gut jetzt! OK