Liste zu Datei mit Zeilenumbrüchen machen

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.
Simon19992
User
Beiträge: 9
Registriert: Mittwoch 5. Dezember 2012, 19:09

Ich bins mal wieder :mrgreen:
Ich habe eine Liste, die viele(200) Listen enthält. Jede dieser einzelnen Listen hat gleich viele Items, man kann sie also sinnvoll zu einer für gnuplot lesbaren plot datei umwandeln. Das Problem ist, dass die anfängliche Liste alles nacheinander mit kommas abtrennt(also ohne zeilenumbruch) und ich eine dat.Datei möchte, in der es Leerzeichen zwischen den Werten der Listen gibt, und die einzelnen Listen untereinander stehen(zeilenumbruch).
Also zum Beispiel habe ich:
[(0,0,1),(0,1,1),(1,1,1),(1,0,1),....] (ja es geht um den random walk :wink: )
und möchte daraus:
0 0 1
0 1 1
1 1 1
1 0 1
...
Das soll irgendwie mit open und write und dem % Operator funktionieren, aber mir wurde nirgends ordentlich erklärt wie man das verwendet.
(Das skript aus der uni ist echt ein witz, da werden auf einer Seite alle möglichen Befehle zu write angegeben, natürlich aber nirgends erklärt was diese tun)
Damit mir niemand vorwirft ich würde es nicht zumindest versuchen zeig ich mal was ich bis jetzt hab:

Code: Alles auswählen

input = open("rw.txt")
output = open("rw.dat","w")
linenr = 0
for line in input:
    linenr += 1
    output.write("%s\n" % line)
output.close()
Es ist möglich, dass hier teils Sachen total sinnlos sind, weil ich diese aus einem Beispiel übernommen habe, welches natürlich nicht erklärt wurde.
Nach dieser Eingabe erhalte ich zwar die rw.dat datei aber sie ist komplett leer.
Ich wäre euch SEHR verbunden wenn ich mir weiterhelfen könnt.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Wenn ich dich richtig verstehe suchst du:

Code: Alles auswählen

' '.join(map(str, line))
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Simon19992
User
Beiträge: 9
Registriert: Mittwoch 5. Dezember 2012, 19:09

jbs hat geschrieben:Wenn ich dich richtig verstehe suchst du:

Code: Alles auswählen

' '.join(map(str, line))
Was das bewirkt weiß ich nicht. Aber sogar wenn es das bewirkt was ich möchte weiß ich ja nicht wo ich das einfügen soll. Ich muss ja trotzdem eine datei erstellen. Kommt das dann bei write hin oder wo?
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Code: Alles auswählen

In [1]: x = 1,2,3

In [2]: ' '.join(map(str, x))
Out[2]: '1 2 3'

In [3]: '-'.join(map(str, x))
Out[3]: '1-2-3'
Den Rest darfst du selber herausfinden.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Eine Ergänzung, keine ganze Lösung. Um eine Datei zum Lesen zu öffnen und eine Datei zum Schreiben, kannst du folgendes nutzen:

Code: Alles auswählen

with open("rw.txt") as f, open("rw.dat","a") as g:

    for line in f:
        
        g.write(line)
Du hattest in deinem Beispielcode eine (Zähl-)Variable, die keine Funktion zu besitzen scheint (linenr) und leider machst du beim Öffnen einen Fehler. Wenn du die Datei mit "w" öffnest, dann überschreibst du den ganzen (!) Inhalt der Datei bei jedem Schreiben, du musst die Datei im Modus "a" öffnen.
Simon19992
User
Beiträge: 9
Registriert: Mittwoch 5. Dezember 2012, 19:09

an jbs:
So wie ich das rauslese müsste ich das füer jede zeile machen und bei 200 zeilen ist das nicht nur viel arbeit sondern wird auch nicht als lösung akzeptiert weil man sich mit python die dinge ja eigentlich einfacher machen soll.

an pixewakb:
Wie gesagt, es kann sein, dass manche Dinge bei mir sehr sinnlos sind ;)
also im skript steht so ein ansatz nicht mal drin. Leider kann ich das gerade nicht ausprobieren, da ich zu hause noch kein linux hab(oder geht das auch wenn man nur python hat?). Kannst du mir deshalb bitte sagen ob meine neue Idee den Zweck erfüllen würde?:

Code: Alles auswählen

with open("rw.txt") as f, open("rw.dat","a") as g:
    for line in f:
        g.write("%s\n" % line)
g.close()
BlackJack

@Simon19992: Du müsstest das *Python* für jede Zeile machen lassen. Dafür gibt es Schleifen. Das ist ziemlich grundlegend und einfach wenn man mal ein Tutorial durchgearbeitet hat. In der Python-Dokumentation ist eines enthalten und Learn Python The Hard Way ist auch einen Blick wert.

Ich denke Du solltest von der Haltung, dass irgendetwas in Deinen Skript steht was man ohne es zu verstehen nur leicht abändern muss, oder dass Du hier nur hartnäckig genug nach einer Lösung fragen musst, abrücken. So kommst Du nämlich rüber.

Python gibt es auch für andere Betriebssysteme als Linux.

Das `g.close()` ist überflüssig, denn dafür sorgt die ``with``-Anweisung ja gerade. Was noch falsch ist, findest Du am besten durch ausprobieren selber heraus.

Namen wie `f` und `g` sollte man vermeiden und stattdessen etwas nehmen was die Bedeutung der Werte hinter diesen Namen im Programm verdeutlicht.
Simon19992
User
Beiträge: 9
Registriert: Mittwoch 5. Dezember 2012, 19:09

selbstverständlich habe ich mir diverse tutorials durchgelesen, aber nirgends etwas wirklich brauchbares zum thema gefunden. Mir bleibt nichts anderes übrig als Leute zu fragen oder einfach Sachen rumzuprobieren :K

mal ne andere Frage: python hab ich mir schon vor längerem daheim installiert, aber es funktioniert nicht so ganz wie es sollte. Wenn ich eine Funktion eingebe und dann mit return beende sind dann links nicht diese Befehlspfeile (>>>). Wenn ich dann zum beispiel ein ergebnis der funktion ausgeben möchte mit print, dann ist das natürlich ein syntaxfehler(da keine >>> da sind). Wenn ich diese manuell eingebe ist es auch ein syntax fehler.
In der Uni funktioniert das aber ohne probleme. (ich versuchs immer mit python 2.7.3 IDLE, in der uni haben wir soweit ich weiß auch 2.7....).
Kann ich das irgendwie beheben?
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Da fehlen dir wirklich die absoluten Grundlagen. Sowohl in Python, als auch in der Art wie man Programmiersprachen nutzt. Du solltest BlackJacks Links folgen und das als Grundlagen für deine Scripte sehen, nicht umgekehrt.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

IDLE verwende ich nicht, aber wenn Du im Terminal (hier OS X) mit return eine Funktion beendest, weiß der Editor nicht, ob Du nicht vielleicht der Funktion doch noch eine Zeile hinzufügen möchtest. Deshalb (vermutlich auch bei Dir) drei Punkte statt der Klammern. Also noch eine Leerzeile anfügen und ... hurra.

Interessieren würde mich mal, ob Du das mit dem Heron-Verfahren hinbekommen hast.
Simon19992
User
Beiträge: 9
Registriert: Mittwoch 5. Dezember 2012, 19:09

Ich habe wirklich keine Ahnung von Programmiersprachen und Programmieren an sich. Das liegt vielleicht daran, dass man das in der Uni in 2 Vorlesungen durchkaut. Und bis jetzt habe ich selten tutorials gefunden die für ein einzelnes problem helfen, man müsste das ganze ding durcharbeiten um es wirklich zu verstehen. Und dafür fehlt mir als student eindeutig die zeit. Dadurch dass das thema python ohnehin nur über 2 wochhen geht, frage ich mich ob sich das überhaupt lohnen würde, selbst wenn ich die zeit hätte. Ich kann es verstehen wenn hier manche genervt sind, dass manche Leute die einfach keine ahnung von Python haben es erklärt haben wollen, aber ich wüsste keine alternative..

Und JA, ich habe das mit dem Heronverfahren noch hinbekommen und 9.5/10 Punkten bekommen :)
Weder ich noch der Tutor konnten meine eigene Lösung(die recht elegant gewesen wäre) realisieren, deshalb musste ich mich an einer anderen Lösung orientieren.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Simon19992 hat geschrieben:Weder ich noch der Tutor konnten meine eigene Lösung(die recht elegant gewesen wäre) realisieren, deshalb musste ich mich an einer anderen Lösung orientieren.
D.h. ihr habt beide abgeschrieben?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wenn du kein Tutorial vernünftig durcharbeiten willst, dann wirst du Python auch nie lernen. Zur Beherrschung einer Programmiersprache gehört ein wenig Arbeit und bei Python ist das, verglichen mit anderen Sprachen, schon sehr wenig. Dazu kommt dann noch das algorithmische Denken, welches ebenfalls viel Übung benötigt.

Es stellt sich doch auch keiner hin und beschwert sich, dass er nach zwei Vorlesungen Japanisch die Sprache noch immer nicht beherrscht, obwohl er ein paar Bücher durchgeblättert hat, aber noch keins gefunden hat, welche genau seine Fragen klärt.
Das Leben ist wie ein Tennisball.
Simon19992
User
Beiträge: 9
Registriert: Mittwoch 5. Dezember 2012, 19:09

kbr, mir ist absolut unverständlich wie man von meiner aussage darauf schließen kann...
Ich hatte eine Idee, die recht kurz und effektiv gewesen wäre. Leider gab es ein paar kleine Probleme, die der Tutor auch nicht lösen konnte.
Dann hab ich mich umgehört was andere Leute für Ideen hatten und habe mich an einer dieser Ideen orientiert(orientiert ist nicht das gleiche
wie abgeschrieben). Die lösung hat dann ungefähr doppelt so viel Platz gebraucht, hat aber funktioniert. Nichts anderes als das habe ich geschrieben....
BlackJack

Simon19992 hat geschrieben:Und bis jetzt habe ich selten tutorials gefunden die für ein einzelnes problem helfen, man müsste das ganze ding durcharbeiten um es wirklich zu verstehen.
Das ist *genau das* was Du machen müsstest. Sonst bleibt nur betteln das jemand anderes Deine Programme für Dich schreibt und Du am Ende nichts gelernt hast. Jedenfalls nicht wie man (nahezu) beliebige Probleme mit einer Programmiersprache löst. Ich nehme aber mal sehr stark an, dass diese Fähigkeit das Ziel der Übung sein soll.
Simon19992
User
Beiträge: 9
Registriert: Mittwoch 5. Dezember 2012, 19:09

Also irgendwie werd ich jetzt von jeder Seite angegangen was ich eher unschön find.

Ich habe doch gar nicht vor python komplett zu beherrschen. Es ist halt in der Uni im Lehrplan, daran kann ich nichts ändern.
Und die Übungen sind darauf abgestimmt, dass man nur etwas python beherrscht. (eigentlich sogar, dass man nichts außer das skript
braucht um sie zu lösen, was jedoch nicht der Fall ist). Ich habe mich NIE beschwert, dass ich python nicht beherrsche.

Zum Vergleich mit japanischer Sprache: Dieser Vergleich ist milde ausgedrückt etwas unpassend.
Die Aufgaben aus den Übungen sind auf die Vorlesung abgestimmt(zumindest versuchen sie es), es wird also nirgends verlangt python wirklich zu beherrschen.
Das kann man eher mit jemandem der in 2 vorlesungen japanisch war und dann "hallo","wie gehts" und "tschüss" sagen soll (was ja wohl machbar ist)

Mein Problem ist, dass wir meistens die Bedeutung einzelner Befehle lernen oder ein Beispiel script bekommen, wobei jedoch kein Befehl erklärt wird.
Zurück zum Vergleich: das ist dann als hätte man ihm beigebracht was "geht" und "wie" bedeutet, jedoch keine grammatik und er deshalb nicht "wie gehts" bilden kann.

Wenn es für euch ein Problem ist mir zu helfen, nur weil ich nicht die Zeit habe eine GANZE programmiersprache für zwei wochen Hausaufgaben zu lernen, dann lasst es, keiner zwingt euch...

Achja, trotzdem Danke an jeden der versucht hat mir zu helfen
lunar

@Simon19992 Wir möchten nicht, dass Du die ganze Sprache lernst. Das wäre doch ein bisschen viel...

Wir möchten aber, dass Du die Grundlagen beherrscht, die für solche Aufgaben mindestens nötig sind. Das schließt grundlegende Sprachkonstrukte wie Schleifen ein. Wenn Du nicht bereit bist, wenigstens diese Grundlagen zu lernen, sondern faktisch nur abschreiben möchtest, dann darfst Du Dich nicht wundern, wenn wir nicht motiviert sind, Dir zu helfen. Wir sind schließlich nicht Dein Hausaufgabenerledigungsdient.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du wirst doch hier von keinem angegangen. Wir haben lediglich gesagt, dass du um das Durcharbeiten, zumindest bis zu einem gewissen Level, eines Tutorials nicht herum kommen wirst. Egal wie schwer die Aufgabe ist. Entweder machst du das strukturiert und opferst dafür drei oder vier Stunden oder du wirst es nicht verstehen (und dabei noch viel mehr Zeit verlieren). So ist halt die Realität, nützt doch nichts, wenn wir hier etwas schönreden. Wie du schon selbst geschrieben hast: der Kram steht bei dir im Lehrplan, deine Möglichkeiten zur Umgehung sind also begrenzt.
Das Leben ist wie ein Tennisball.
Simon19992
User
Beiträge: 9
Registriert: Mittwoch 5. Dezember 2012, 19:09

Ich würde behaupten, dass ich das was wir in der Uni über schleifen gelernt haben kann.
Das mit dem write und den dateien ist ja aber eine ganz andere Hausnummer, da gibts Tausend Sachen die ich nirgends gelernt hab.
Und ich HABE mir wirklich viele tutorials durchgelesen, aber gebt doch selbst mal ein kleines Unterthema von Python in google ein und
stellt euch vor ihr hättet von python nur wenig ahnung. Ich glaub kaum, dass dann jemand das was da steht verstehen würde. Und darum bin ich hier,
ich komme mit der hoffnung, dass mir jemand genau diese schritte verständlich erklären kann. Ich möchte doch gar nicht abschreiben,
ich hoffe nur, dass es mir jemand so weit erklärt, dass ichs selbst hinbekomme....
Achtung, jetzt kommt eine gute Frage: Ist ein Forum nicht genau dafür da???
Ich habe nunmal nicht die zeit mehrere Stunden ein Tutorial zu lesen um es dann vielleicht besser zu verstehen.
Die Übungen sind halt nicht dafür gedacht, dass man trotz Vorlesung sich nahezu alles selbst beibringen muss. Daher wird es doch wohl
erlaubt sein solche Dinge zu fragen, meine güte...
Und für die die immernoch meinen ich würde mir hier meine Hausaufgabe lösen lassen:
Lest doch bitte nochmal die Frage durch. Ich frage einen einzigen Zusammenhang, das ist ein Bruchteil der Aufgabe.
Ich wüsste nicht wie ich nach noch weniger als einem Zusammenhang fragen kann, das würde keinen Sinn machen.
Wenn ihr keine konstruktive Antwort geben möchtet, dann gebt doch bitte keine Antwort.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Simon19992 hat geschrieben:Und ich HABE mir wirklich viele tutorials durchgelesen, aber gebt doch selbst mal ein kleines Unterthema von Python in google ein und
stellt euch vor ihr hättet von python nur wenig ahnung. Ich glaub kaum, dass dann jemand das was da steht verstehen würde.
Und deshalbs sollst du EIN Tutorial durcharbeiten und nicht zehn überfliegen.
Simon19992 hat geschrieben:Achtung, jetzt kommt eine gute Frage: Ist ein Forum nicht genau dafür da???
Ich habe nunmal nicht die zeit mehrere Stunden ein Tutorial zu lesen um es dann vielleicht besser zu verstehen.
Das Forum ist nicht dafür gedacht dir noch einmal persönlich ein Tutorial vorzulesen.
Das Leben ist wie ein Tennisball.
Antworten