Probleme mit Write() unter Linux.

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
Stegi95
User
Beiträge: 12
Registriert: Freitag 29. Oktober 2010, 13:03

Hey Leute,
ich hab ein kleines Problem mit write unter Linux.
Ich habe ein String Array mit einer beliebigen Anzahl, welches ich sauber geordnet in eine *.txt speichern möchte(Die txt liegt auf dem Desktop). Ich habs sowohl mit write+for schleife(jeden eintrag einzeln schreben) und writelines(ganzes Array schreiben) versucht, aber die .txt Datei bleibt leer. Es kommt keine Fehlermeldung. Betriebssystem ist Linux Mint 10

Könnt ihr mir helfen?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Stegi95 hat geschrieben: Könnt ihr mir helfen?
Bestimmt. Wo ist denn mal ein (nicht) funktionierendes Code-Schnipselchen?

Was meinst Du mit array? Wirklich die Klasse aus dem gleichnamigen array-Modul? Oder aus numpy? Oder meinst Du eine Liste?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Stegi95 hat geschrieben:Ich habe ein String Array mit einer beliebigen Anzahl, welches ich sauber geordnet in eine *.txt speichern möchte(Die txt liegt auf dem Desktop). Ich habs sowohl mit write+for schleife(jeden eintrag einzeln schreben) und writelines(ganzes Array schreiben) versucht, aber die .txt Datei bleibt leer. Es kommt keine Fehlermeldung. Betriebssystem ist Linux Mint 10

Könnt ihr mir helfen?
Ja. Du hast einen Fehler in Codezeile 7.

Jetzt mal im Ernst: Wie sollen wir dir helfen können wenn du nicht einmal einen minimalen Code zeigst der deiner Meinung nach funktionieren müsste, es aber nicht tut. "Geht nicht" ist so ziemlich die sinnloseste Fehlerbeschreibung die man liefern kann.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

/me hat geschrieben: Ja. Du hast einen Fehler in Codezeile 7.
lol! You made my day! :mrgreen:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Stegi95
User
Beiträge: 12
Registriert: Freitag 29. Oktober 2010, 13:03

Ups...ich meine natürlich ne Liste...habs erst gemerkt, als ich abgeschickt hab...

Möglichkeit 1:

Code: Alles auswählen

liste=["1","2","3"] #Diese Liste soll gespeichert werden
fob=open("Pfad","w")
fob.writelines(liste)
fob.close
Nummer2

Code: Alles auswählen

liste=["1","2","3"] 
fob=open("Pfad","w")
for i in range(len(liste)):
    fob.write(liste[i])
    fob.write(" ")
fob.close()
Die Möglichkeiten hab ich versucht...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

1.) Dateien öffnet man mit dem "with open() as handler"-idiom.

2.) Wie sollen die Daten denn serialisiert werden? Siehe mal die Beispiele:

Code: Alles auswählen

1
2
3
oder

Code: Alles auswählen

1 2 3
ggf. mit anderem Trennzeichen

Oder noch anders?

Lies Dir doch (noch) mal die Doku zu File Objekten durch! Dort steht doch, dass man nur Strings bzw. Iterables von Strings speichern kann. Du übergibst aber keine Strings.

Dein 2. Beispiel ist übrigens immer eine schlechte Idee, da man über die Elemente einer Liste direkt iterieren kann!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Stegi95
User
Beiträge: 12
Registriert: Freitag 29. Oktober 2010, 13:03

Die zweite Methode sieht schöner aus...aber insgesammt ist das Trennzeichen egal.

Im zweiten Beispiel übergebe ich doch Strings, oder? Die Einträge der Liste sind ja Strings...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Stegi95 hat geschrieben: Im zweiten Beispiel übergebe ich doch Strings, oder? Die Einträge der Liste sind ja Strings...
Stimmt. Hab ich übersehen.

Die sollte auch klappen - was passiert denn? (Aber Du solltest dennoch das open ändern und die Schleife!)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Stegi95
User
Beiträge: 12
Registriert: Freitag 29. Oktober 2010, 13:03

Ok, hier kann zugemacht werden...ich hab das Problem gefunden...ich hatte nen Fehler beim Füllen des Arrays gemacht...Habs nur nicht gemerkt...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Damit aber andere sich das nicht zum Vorbild nehmen, hier noch mal eine hübschere Variante:

Code: Alles auswählen

data = ["1", "2", "3"]
with open(filename, "w") as outfile:
    for item in data:
        outfile.write(item)
    # oder
    map(outfile.write, liste)
ok, Trennzeichen müßte man ggf. noch einbauen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Eine Liste zu erstellen und die dann wegzuwerfen, nur um eine explizite for-Schleife zu sparen, ist aber auch kein gutes Vorbild. Das ist eher ein Beispiel, wie man es nicht machen sollte. Also bitte nur den ersten Vorschlag von Hyperion beachten.
Antworten