Frage zu files

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.
VitroN
User
Beiträge: 16
Registriert: Samstag 12. Januar 2008, 09:58

Frage zu files

Beitragvon VitroN » Samstag 12. Januar 2008, 10:12

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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Samstag 12. Januar 2008, 10:23

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
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Re: Frage zu files

Beitragvon Darii » Samstag 12. Januar 2008, 10:25

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).
VitroN
User
Beiträge: 16
Registriert: Samstag 12. Januar 2008, 09:58

Beitragvon VitroN » Samstag 12. Januar 2008, 10:45

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
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Samstag 12. Januar 2008, 10:52

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.
Zuletzt geändert von Darii am Samstag 12. Januar 2008, 10:56, insgesamt 1-mal geändert.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Samstag 12. Januar 2008, 10:55

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
VitroN
User
Beiträge: 16
Registriert: Samstag 12. Januar 2008, 09:58

Beitragvon VitroN » Samstag 12. Januar 2008, 10:56

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...
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Samstag 12. Januar 2008, 11:00

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
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Samstag 12. Januar 2008, 11:54

Noch eine schöne Idee, wo's auch mit Excel funktioniert --> CSV benutzen.
BlackJack

Beitragvon BlackJack » Samstag 12. Januar 2008, 12:25

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.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Samstag 12. Januar 2008, 20:10

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Sonntag 13. Januar 2008, 00:23

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.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Sonntag 13. Januar 2008, 00:37

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Beitragvon Trundle » Sonntag 13. Januar 2008, 00:38

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.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Beitragvon Darii » Sonntag 13. Januar 2008, 00:54

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder