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.
writelines schreibt eine Liste (oder besser gesagt Iterierbares wie die Fehlermeldung vermuten lässt) in Form so vieler Zeilen wie die Liste lang ist in eine Datei. Du übergibst aber eine einzelne Zahl, von daher wird das nicht funktionieren. Entweder du schreibst mit write eine Zahl nach der Nächsten (am besten zusammen mit einem Absatz) rein. Oder du erstellst eine Liste an Zahlen, die du dann per writelines in die Datei schreibst (was wohl die bessere Alternative wäre).
Oh und die Einrückung sieht etwas merkwürdig bei dir aus. Außerdem wäre es besser die Datei mit dem with-Statement zu öffnen:
Das mit der Einrückung liegt wohl daran, dass ich das aus meiner Frage auf gutefrage.net rauskopiert habe (auf die ich leider keine Antworten bekommen habe ;D)
Kannst du mir denn vielleicht erklären, wie das mit der Liste funktioniert und warum es besser ist, die Datei mit dem with statement zu öffnen?
So, also eigenltich müsste jetzt alles funktionieren...
Vielleicht gibt es da für Linux auch was, aber da kenn ich aber die Befehle nicht.
Wegen der Virtuellen Maschine, ich weiß nicht obs geht, aber probiers mal mit Wine.
Technik ist: wenn alles funktioniert und keiner weiß warum. Wer Rechtschreibfehler findet darf sie behalten.
Py-Prog hat geschrieben:Vielleicht gibt es da für Linux auch was, aber da kenn ich aber die Befehle nicht.
Wegen der Virtuellen Maschine, ich weiß nicht obs geht, aber probiers mal mit Wine.
Bei wine ist das glaub ich mit den befehlen nicht so optimal gelöst. Wenn ich das so integriert machen würde wäre glaub ich crossover besser geeignet. Ich wollte aber eh ne virtuelle Maschine mit Virtualbox anlegen
Weißt du denn, wie das nur mit Python zu lösen ist?
Also wär das schon nicht so schlecht das unemuliert laufen zu lassen
So, also eigenltich müsste jetzt alles funktionieren...
pfad=raw_input('Pfad: ')
startzahl=input('Startzahl: ')
endzahl=input('Endzahl: ')
zahl=startzahl
while (zahl<=endzahl and zahl>=startzahl):
zahl=zahl+1
print zahl
with open (pfad,'w') as doc:
doc.write(zahl)
Da kommt jetzt allerdings die gleiche Fehlermeldung wie ich sie ganz zu Anfang mit writeline hatte:
Traceback (most recent call last):
File "/home/jan/tmp.py", line 9, in <module>
doc.write(zahl)
TypeError: argument 1 must be string or read-only character buffer, not int
Ich will nunmal keinen String sonderne ne Zahl schreiben....
So, also eigenltich müsste jetzt alles funktionieren...
pfad=raw_input('Pfad: ')
startzahl=input('Startzahl: ')
endzahl=input('Endzahl: ')
zahl=startzahl
with open (pfad,'w') as doc:
while (zahl<=endzahl and zahl>=startzahl):
zahl += 1
print zahl
doc.write(''.join((str(zahl), '\n'))
So nimmt man das her, und wieso schreibst du zahl = zahl + 1, wieso nicht zahl += 1?
Und du hast die Zahl nicht als String sondern als Zahl übergeben, das geht nicht, und du hast den zeilenumbruch vergessen ...
Technik ist: wenn alles funktioniert und keiner weiß warum. Wer Rechtschreibfehler findet darf sie behalten.
Da du das with-statement in die Schleife getan hast, würde folgender Code (wenn er denn tatsächlich laufen würde) bei jedem Durchlauf die Datei neu erstellen und so den vorigen Inhalt überschreiben. D.h. In der Datei würde nur die letzte Zahl stehen.
-> Pack die Schleife und den restlichen Kram in den with-Block. Oder noch besser: Erstelle erst einmal eine Liste mit allen Zahlen und packe danach einen with-Block, der die Liste einmal in deine Datei schreibt.
Was die Fehlermeldung angeht: Du schreibst keinen String in die Datei. Konvertiere die Zahl vorher also mit str(number).
@Py-Prog: Wieso überprüfst du immer noch bei jedem Durchgang ob die Zahl größer als die Startzahl ist? Sowas würde zu Beginn der Schleife Sinn machen (à la "Die Startzahl ist größer als die Endzahl"), aber doch nicht bei jedem Durchlauf. str.join(list) ist für Listen gedacht, es für einen Einzelstring zu nutzen ist sinnlos, da reicht str() vollkommen aus. Und wie gesagt, es wäre wesentlich besser eine Liste zu erstellen (wofür ja bei dem Fall ein range-Objekt vollkommen ausreichen würde) und die dann in die Datei zu schreiben statt die Datei vorher zu öffnen und Zeile für Zeile zu schreiben.
webspider hat geschrieben:Da du das with-statement in die Schleife getan hast, würde folgender Code (wenn er denn tatsächlich laufen würde) bei jedem Durchlauf die Datei neu erstellen und so den vorigen Inhalt überschreiben. D.h. In der Datei würde nur die letzte Zahl stehen.
-> Pack die Schleife und den restlichen Kram in den with-Block. Oder noch besser: Erstelle erst einmal eine Liste mit allen Zahlen und packe danach einen with-Block, der die Liste einmal in deine Datei schreibt.
Was die Fehlermeldung angeht: Du schreibst keinen String in die Datei. Konvertiere die Zahl vorher also mit str(number).
@Py-Prog: Wieso überprüfst du immer noch bei jedem Durchgang ob die Zahl größer als die Startzahl ist? Sowas würde zu Beginn der Schleife Sinn machen (à la "Die Startzahl ist größer als die Endzahl"), aber doch nicht bei jedem Durchlauf. str.join(list) ist für Listen gedacht, es für einen Einzelstring zu nutzen ist sinnlos, da reicht str() vollkommen aus. Und wie gesagt, es wäre wesentlich besser eine Liste zu erstellen (wofür ja bei dem Fall ein range-Objekt vollkommen ausreichen würde) und die dann in die Datei zu schreiben statt die Datei vorher zu öffnen und Zeile für Zeile zu schreiben.
Ok ok, ich habe noch viel zu lernen
So, also eigenltich müsste jetzt alles funktionieren...
webspider hat geschrieben:@Py-Prog: Wieso überprüfst du immer noch bei jedem Durchgang ob die Zahl größer als die Startzahl ist? Sowas würde zu Beginn der Schleife Sinn machen (à la "Die Startzahl ist größer als die Endzahl"), aber doch nicht bei jedem Durchlauf. str.join(list) ist für Listen gedacht, es für einen Einzelstring zu nutzen ist sinnlos, da reicht str() vollkommen aus. Und wie gesagt, es wäre wesentlich besser eine Liste zu erstellen (wofür ja bei dem Fall ein range-Objekt vollkommen ausreichen würde) und die dann in die Datei zu schreiben statt die Datei vorher zu öffnen und Zeile für Zeile zu schreiben.
Und wenn man ein range-Objekt her nimmt braucht man keine schleife mehr, und dann wird er beim nächsten mal den gleichen Fehler wieder machen. Also macht es sinn erst mal das so um die schleife zu bauen, und danach das mit range ect. zu machen.
Technik ist: wenn alles funktioniert und keiner weiß warum. Wer Rechtschreibfehler findet darf sie behalten.