Hallo,
habe mit f=file('Datei.xls', 'w') eine Ecxel-Datei erzeugt und bräuchte den Befehl wie man in die nächste Zeile springt. Gibt es da vllt zwei verschiedene Befehle, wie man in die Zelle darunter und in die rechts davon?
Und ich würde noch gern wissen, wie man z.B. in einer Textdatei (.txt) einen Zeilenumbruch macht
Danke für eure Hilfe
VitroN
Frage zu files
Eine Excel-Datei ist eine Binärdatei. Daher müsstest du schon mal "wb" statt nur "w" benutzen, wenn du diese erzeugen willst. Ihr Aufbau ist jedoch nicht-trivial und ich bezweifle stark, dass es praktikabel wäre, dieses Format "zu Fuß" zu schreiben. Eine Zelle kannst du daher auf diese weise nicht erreichen.
Eine Textdatei wiederum sollte man mit "w" zum Schreiben öffnen. Einen Zeilenumbruch kannst du dann mit "\n" erzeugen. Python wird das für dein Betriebssystem richtige Zeichen (oder Zeichenfolge) schreiben.
Stefan
Eine Textdatei wiederum sollte man mit "w" zum Schreiben öffnen. Einen Zeilenumbruch kannst du dann mit "\n" erzeugen. Python wird das für dein Betriebssystem richtige Zeichen (oder Zeichenfolge) schreiben.
Stefan
Nein hast du nicht, du hast eine Datei erzeugt, wie auf .xls endet. Das allein macht die Datei aber noch lange nicht zu einer Excel-Datei. Die Dateiendung ist für file völlig unerheblich.VitroN hat geschrieben:Hallo,
habe mit f=file('Datei.xls', 'w') eine Ecxel-Datei erzeugt
Indem du ein \n in deine Strings einbaust(ist unter Win eigentlich \r\n, aber die meisten Programmen kommen damit auch so klar und so spart man sich, da nur für Windows extra noch eine Ausnahme zu machen).Und ich würde noch gern wissen, wie man z.B. in einer Textdatei (.txt) einen Zeilenumbruch macht
hmm, ok...
Aber wie kann ich denn jetzt eine "richtige" Ecxel-Tabelle erzeugen bzw eine "zu Fuß" erzeugte Datei lesen und was neues da rein schreiben?
Also mit \n kommt man schon mal eine Zeile nach unten...aber ich müsste auch noch iwie in die Zelle nach rechts...
ach, und wie kann ich die Position zum Beispiel eines Labels ändern? Die werden ja immer automatisch zentriert untereinander gesetzt
Aber wie kann ich denn jetzt eine "richtige" Ecxel-Tabelle erzeugen bzw eine "zu Fuß" erzeugte Datei lesen und was neues da rein schreiben?
Also mit \n kommt man schon mal eine Zeile nach unten...aber ich müsste auch noch iwie in die Zelle nach rechts...
ach, und wie kann ich die Position zum Beispiel eines Labels ändern? Die werden ja immer automatisch zentriert untereinander gesetzt
Gar nicht, bzw. nur mit VIEL Aufwand also lass es lieber. Dass das nicht so einfach ist siehst du daran, dass Openoffice immer noch nicht 100% Excel-kompatibel ist, obwohl in die Entwicklung viel Geld und Manpower geflossen sind.VitroN hat geschrieben:Aber wie kann ich denn jetzt eine "richtige" Ecxel-Tabelle erzeugen bzw eine "zu Fuß" erzeugte Datei lesen und was neues da rein schreiben?
Was für ein Label?
@sma: Python schreibt da das rein, was man angibt und nichts anderes.
Zuletzt geändert von Darii am Samstag 12. Januar 2008, 10:56, insgesamt 1-mal geändert.
VitroN, du kannst in einer Textdatei mit "\n" einen Zeilenumbruch hinzufügen. Das gilt nicht für Exceldateien. Wenn du diese lesen oder schreiben willst, musst du deren internen Aufbau verstehen.
Im Rahmen von Openoffice wurde das Format dokumentiert, Ergebnis ist eine ca. 250 seitige Spezifikation.
Wäre ich du, würde ich das Projekt schnell wieder aufgeben :) Ich hätte allerdings auch mal Google befragt, und dann vielleicht dies gefunden, was - zumindest unter Windows - nach dem besseren Ansatz aussieht. Statt ADO würde ich aber direkt per OLE-Automation Excel fernsteuern, denke ich...
Stefan
Im Rahmen von Openoffice wurde das Format dokumentiert, Ergebnis ist eine ca. 250 seitige Spezifikation.
Wäre ich du, würde ich das Projekt schnell wieder aufgeben :) Ich hätte allerdings auch mal Google befragt, und dann vielleicht dies gefunden, was - zumindest unter Windows - nach dem besseren Ansatz aussieht. Statt ADO würde ich aber direkt per OLE-Automation Excel fernsteuern, denke ich...
Stefan
Womit denn? Tkinter, Gtk, wxWidgets, Qt, Cocoa?VitroN hat geschrieben:Ich meine ein Label oder Button auf ner ganz normalen Benutzeroberfläche, die ich mit Python erzeuge...
Aber ich nehme mal an, du meinst Tkinter
http://infohost.nmt.edu/tcc/help/pubs/t ... label.html
Noch eine schöne Idee, wo's auch mit Excel funktioniert --> CSV benutzen.
Exceldateien lassen sich mit pyExcelerator auch ohne Excel und/oder Windows erstellen.
Wenn die Daten einfach genug sind, ist natürlich das von BlackVivi vorgeschlagene CSV-Format sinnvoller, da *wesentlich* mehr Werkzeuge und Programme damit etwas anfangen können.
Wenn die Daten einfach genug sind, ist natürlich das von BlackVivi vorgeschlagene CSV-Format sinnvoller, da *wesentlich* mehr Werkzeuge und Programme damit etwas anfangen können.
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Äh nein, im Textmodus ("w" und nicht etwa "wb") schreibt Windows' C-Library "\r\n", wenn man "\n" im write()-String stehen hat.Darii hat geschrieben: @sma: Python schreibt da das rein, was man angibt und nichts anderes.
Ich hatte das vorhin getestet, wenn man "\n" reinschreibt und es wieder ausliest bleibt da ein "\n". Oder entfernt Python das \r wieder selbständig? Das wäre irgendwie ziemlich dämlich dass das nirgends steht(oder nur sehr versteckt, wäre eigentlich ein Fall für ein großes, rotes Warnschild: Hallo hier tut Python etwas unerwartetes), soviel „Magie“ gibts ja sonst nur bei PHP.birkenfeld hat geschrieben:Äh nein, im Textmodus ("w" und nicht etwa "wb") schreibt Windows' C-Library "\r\n", wenn man "\n" im write()-String stehen hat.Darii hat geschrieben: @sma: Python schreibt da das rein, was man angibt und nichts anderes.
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Ja, das wird beim Lesen auch wieder entfernt. Wäre sonst ja auch unlogisch. Wie schon geschrieben, Python hat mit der "Magie" hier nichts zu tun, sondern übernimmt einfach das Verhalten der C-Library.Darii hat geschrieben:Ich hatte das vorhin getestet, wenn man "\n" reinschreibt und es wieder ausliest bleibt da ein "\n". Oder entfernt Python das \r wieder selbständig? Das wäre irgendwie ziemlich dämlich dass das nirgends steht(oder nur sehr versteckt), soviel „Magie“ gibts ja sonst nur bei PHP.birkenfeld hat geschrieben:Äh nein, im Textmodus ("w" und nicht etwa "wb") schreibt Windows' C-Library "\r\n", wenn man "\n" im write()-String stehen hat.Darii hat geschrieben: @sma: Python schreibt da das rein, was man angibt und nichts anderes.
Du sagst, du magst eine Textdatei haben (`w'). Und dann sagst du, du magst eine neue Zeile haben (`\n'). Dann ersetzt Python (bzw. eher die C-Lib) automatisch `\n' mit den für das Betriebssystem passenden Zeichen, wie sma bereits geschrieben hat. Und beim Auslesen werden diese wieder in `\n' umgewandelt, so dass du dir als Programmierer keine Gedanken über die Plattform machen musst. Meiner Meinung nach völlig akzeptabel, denn du hast explizit gesagt, dass du eine Text- und keine Binärdatei haben magst.Darii hat geschrieben:Ich hatte das vorhin getestet, wenn man "\n" reinschreibt und es wieder ausliest bleibt da ein "\n". Oder entfernt Python das \r wieder selbständig? Das wäre irgendwie ziemlich dämlich dass das nirgends steht(oder nur sehr versteckt), soviel „Magie“ gibts ja sonst nur bei PHP.birkenfeld hat geschrieben:Äh nein, im Textmodus ("w" und nicht etwa "wb") schreibt Windows' C-Library "\r\n", wenn man "\n" im write()-String stehen hat.Darii hat geschrieben: @sma: Python schreibt da das rein, was man angibt und nichts anderes.
Das sollte man das aber irgendwo hinschreiben, ich habe das so nirgends explizit gelesen. Und so intuitiv wie du das beschreibst ist das nicht. Ich habe mir ehrlich gesagt noch nie darüber Gedanken gemacht, was das jetzt konkret bedeutet wenn ich eine Datei als Textdatei öffne. Ich hatte aber zumindest erwartet, dass Python genau das an ASCII-Zeichen reinschreibt was ich ihm sage. Und "\n" war in meinen Augen keine neu Zeile, sondern ein einfaches Zeichen(chr(10)).Trundle hat geschrieben:Du sagst, du magst eine Textdatei haben (`w'). Und dann sagst du, du magst eine neue Zeile haben (`\n'). Dann ersetzt Python (bzw. eher die C-Lib) automatisch `\n' mit den für das Betriebssystem passenden Zeichen, wie sma bereits geschrieben hat. Und beim Auslesen werden diese wieder in `\n' umgewandelt, so dass du dir als Programmierer keine Gedanken über die Plattform machen musst. Meiner Meinung nach völlig akzeptabel, denn du hast explizit gesagt, dass du eine Text- und keine Binärdatei haben magst.
Geschieht diese Umwandlung nur bei der Dateiausgabe oder auch irgendwo anders?
Abgesehen davon wäre es doch in den meisten Fällen auch egal, wenn Windows \n statt \r\n abbekäme. Das einzige Programm, das ich kenne und das darüber stolpert, ist der normale Editor.
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Die Doku verweist da auf die C-level fopen() Funktion. Da hast du recht, das ist nicht ganz optimal. Ich werde das ändern.Darii hat geschrieben:Das sollte man das aber irgendwo hinschreiben, ich habe das so nirgends explizit gelesen.Trundle hat geschrieben:Du sagst, du magst eine Textdatei haben (`w'). Und dann sagst du, du magst eine neue Zeile haben (`\n'). Dann ersetzt Python (bzw. eher die C-Lib) automatisch `\n' mit den für das Betriebssystem passenden Zeichen, wie sma bereits geschrieben hat. Und beim Auslesen werden diese wieder in `\n' umgewandelt, so dass du dir als Programmierer keine Gedanken über die Plattform machen musst. Meiner Meinung nach völlig akzeptabel, denn du hast explizit gesagt, dass du eine Text- und keine Binärdatei haben magst.
Da beschreibst du jetzt genau den Binärmodus. Für den ist \n ein Byte wie jedes andere.Und so intuitiv wie du das beschreibst ist das nicht. Ich habe mir ehrlich gesagt noch nie darüber Gedanken gemacht, was das jetzt konkret bedeutet wenn ich eine Datei als Textdatei öffne. Ich hatte aber zumindest erwartet, dass Python genau das an ASCII-Zeichen reinschreibt was ich ihm sage. Und "\n" war in meinen Augen keine neu Zeile, sondern ein einfaches Zeichen(chr(10)).
Nein, nur dort.Geschieht diese Umwandlung nur bei der Dateiausgabe oder auch irgendwo anders?
Das konventionelle Zeilenende unter DOS/Windows ist nunmal \r\n.Abgesehen davon wäre es doch in den meisten Fällen auch egal, wenn Windows \n statt \r\n abbekäme. Das einzige Programm, das ich kenne und das darüber stolpert, ist der normale Editor.
Das wäre toll. Auf den ganzen C-Manpages findet man das auch nicht so auf die Schnelle(ich es noch nicht gefunden ).birkenfeld hat geschrieben:Die Doku verweist da auf die C-level fopen() Funktion. Da hast du recht, das ist nicht ganz optimal. Ich werde das ändern.
Dann bin ich ja beruhigt.Nein, nur dort.Geschieht diese Umwandlung nur bei der Dateiausgabe oder auch irgendwo anders?
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
Gerold hat auch mal einen längeren Text zu Dateien und Konvertierung geschrieben.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wovon es eine [wiki=Von_Umlauten%2C_Unicode_und_Encodings]verbesserte Fassung[/wiki] im Wiki gibt.mkallas hat geschrieben:Gerold hat auch mal einen längeren Text zu Dateien und Konvertierung geschrieben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice