Seite 1 von 1

Frage zu files

Verfasst: Samstag 12. Januar 2008, 10:12
von VitroN
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

Verfasst: Samstag 12. Januar 2008, 10:23
von sma
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

Re: Frage zu files

Verfasst: Samstag 12. Januar 2008, 10:25
von Darii
VitroN hat geschrieben:Hallo,
habe mit f=file('Datei.xls', 'w') eine Ecxel-Datei erzeugt
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.
Und ich würde noch gern wissen, wie man z.B. in einer Textdatei (.txt) einen Zeilenumbruch macht
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).

Verfasst: Samstag 12. Januar 2008, 10:45
von VitroN
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

Verfasst: Samstag 12. Januar 2008, 10:52
von Darii
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?
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.

Was für ein Label?

@sma: Python schreibt da das rein, was man angibt und nichts anderes.

Verfasst: Samstag 12. Januar 2008, 10:55
von sma
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

Verfasst: Samstag 12. Januar 2008, 10:56
von VitroN
Darii hat geschrieben:
VitroN hat geschrieben:Was für ein Label?
sry, gehört nicht ganz zum Thema^^
Ich meine ein Label oder Button auf ner ganz normalen Benutzeroberfläche, die ich mit Python erzeuge...

Verfasst: Samstag 12. Januar 2008, 11:00
von Darii
VitroN hat geschrieben:Ich meine ein Label oder Button auf ner ganz normalen Benutzeroberfläche, die ich mit Python erzeuge...
Womit denn? Tkinter, Gtk, wxWidgets, Qt, Cocoa?

Aber ich nehme mal an, du meinst Tkinter

http://infohost.nmt.edu/tcc/help/pubs/t ... label.html

Verfasst: Samstag 12. Januar 2008, 11:54
von BlackVivi
Noch eine schöne Idee, wo's auch mit Excel funktioniert --> CSV benutzen.

Verfasst: Samstag 12. Januar 2008, 12:25
von BlackJack
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.

Verfasst: Samstag 12. Januar 2008, 20:10
von birkenfeld
Darii hat geschrieben: @sma: Python schreibt da das rein, was man angibt und nichts anderes.
Äh nein, im Textmodus ("w" und nicht etwa "wb") schreibt Windows' C-Library "\r\n", wenn man "\n" im write()-String stehen hat.

Verfasst: Sonntag 13. Januar 2008, 00:23
von Darii
birkenfeld hat geschrieben:
Darii hat geschrieben: @sma: Python schreibt da das rein, was man angibt und nichts anderes.
Äh nein, im Textmodus ("w" und nicht etwa "wb") schreibt Windows' C-Library "\r\n", wenn man "\n" im write()-String stehen hat.
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.

Verfasst: Sonntag 13. Januar 2008, 00:37
von birkenfeld
Darii hat geschrieben:
birkenfeld hat geschrieben:
Darii hat geschrieben: @sma: Python schreibt da das rein, was man angibt und nichts anderes.
Äh nein, im Textmodus ("w" und nicht etwa "wb") schreibt Windows' C-Library "\r\n", wenn man "\n" im write()-String stehen hat.
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.
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.

Verfasst: Sonntag 13. Januar 2008, 00:38
von Trundle
Darii hat geschrieben:
birkenfeld hat geschrieben:
Darii hat geschrieben: @sma: Python schreibt da das rein, was man angibt und nichts anderes.
Äh nein, im Textmodus ("w" und nicht etwa "wb") schreibt Windows' C-Library "\r\n", wenn man "\n" im write()-String stehen hat.
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.
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.

Verfasst: Sonntag 13. Januar 2008, 00:54
von Darii
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.
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)).
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.

Verfasst: Sonntag 13. Januar 2008, 00:57
von birkenfeld
Darii hat geschrieben:
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.
Das sollte man das aber irgendwo hinschreiben, ich habe das so nirgends explizit gelesen.
Die Doku verweist da auf die C-level fopen() Funktion. Da hast du recht, das ist nicht ganz optimal. Ich werde das ändern.
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)).
Da beschreibst du jetzt genau den Binärmodus. Für den ist \n ein Byte wie jedes andere.
Geschieht diese Umwandlung nur bei der Dateiausgabe oder auch irgendwo anders?
Nein, nur dort.
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 konventionelle Zeilenende unter DOS/Windows ist nunmal \r\n.

Verfasst: Sonntag 13. Januar 2008, 01:38
von Darii
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.
Das wäre toll. Auf den ganzen C-Manpages findet man das auch nicht so auf die Schnelle(ich es noch nicht gefunden :)).
Geschieht diese Umwandlung nur bei der Dateiausgabe oder auch irgendwo anders?
Nein, nur dort.
Dann bin ich ja beruhigt. ;)

Verfasst: Montag 14. Januar 2008, 11:19
von mkesper
Gerold hat auch mal einen längeren Text zu Dateien und Konvertierung geschrieben.

Verfasst: Montag 14. Januar 2008, 17:54
von Leonidas
mkallas hat geschrieben:Gerold hat auch mal einen längeren Text zu Dateien und Konvertierung geschrieben.
Wovon es eine [wiki=Von_Umlauten%2C_Unicode_und_Encodings]verbesserte Fassung[/wiki] im Wiki gibt.