for Schleife

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
Student_1515
User
Beiträge: 2
Registriert: Donnerstag 19. Dezember 2013, 14:23

Hi,
ich möchte gerne eine in einer Schleife eine txt. datei abspeichern Jedoch soll sich der Name nach jedem durchlauf ändern.
Wie kann ich die machen?

Code: Alles auswählen

for n in frames:
  number_values = len(X)
  [b]file = open('Name_'n*50+200'.txt','w+')[/b]
    for i in xrange(number_values):
      n=Y
      m=Z
      file.write(str(n) + '\t' + str(m[0]) + '\t' + str(m[1]) + '\t' + str(m[2]) + '\n')  
  file.close()
Hab hier mal n*50+200 eingefügt

Danke für eure Hilfe
Zuletzt geändert von Hyperion am Donnerstag 19. Dezember 2013, 14:45, insgesamt 1-mal geändert.
Grund: Code in Python-Code Block gesetzt
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Setze die von dir fett markierte Zeile halt in deine Schleife rein. Dann ergibt sich ja automatisch in jedem Schleifendurchlauf ein neuer Dateiname. Ansonsten hat dein Code noch ziemlich viele stilistische Mängel. Die entsprechenden Kommentare dazu überlasse ich aber anderen (habe da gerade keine Lust drauf)... :)

EDIT: Gut, du solltest die Variablen natürlich auch innerhalb der Schleife ändern. Da hatte ich jetzt einfach mal vorausgesetzt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Suchst Du so etwas in der Art?

Code: Alles auswählen

for i in range(5):
    print("Name_{}".format(i))

> Name_0
Name_1
Name_2
Name_3
Name_4
Kleine Anmerkungen:

- Dateien solltest Du immer so öffnen:

Code: Alles auswählen

with open(...) as f:
    # hier ist f das file-Objekt; es wird automatisch geschlossen (auch bei Fehlern!)
- Benenne Variablen leserlich. Was bedeuten ``x``, ``y``, usw?

- Wieso bindest Du in der Schleife ``Y`` an ``n``? Du könntest ``Y`` auch direkt benutzen! Und leserlicher wird das damit imho auch nicht... außer, ``n`` und ``m`` sind in dem Kontext sinnvolle Namen - dann sollte es ``Y`` und ``Z`` aber *nicht* geben!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Student_1515
User
Beiträge: 2
Registriert: Donnerstag 19. Dezember 2013, 14:23

Tut mir leid aber ich kann in python echt nix

n,m usw waren nur Platzhalten.
Ja genau, so was suche ich.
Ist dies dann auch eine txt.Datei? Wie kann ich stilistische die Dateien (Name_50, Name_100, Name_150) erstellen?


Danke für eure Hilfe!!!!
BlackJack

@Student_1515: `n` wird in der äusseren Schleife auch schon verwendet. Es ist verwirrend wenn der selbe Name in verschachtelten Schleifen für unterschiedliche Dinge verwendet wird.

Nichts in der inneren Schleife hängt von `i` ab, also kann alles vor der Schleife vorbereitet werden, sofern das denn tatsächlich so gewollt ist.

`number_values` braucht man nicht unbedingt. Der Name wird ja nur an einer Stelle verwendet und da könnte man den Ausdruck dafür auch direkt hinschreiben. Falls `i` doch verwendet wird, und zwar als Index in eine Sequenz dann sollte man sich das komplett sparen, denn in Python kann man *direkt* über die Elemente einer Sequenz iterieren, ohne den Umweg über eine Indexvariable. Falls man *zusätzlich* einen laufenden Index benötigt, nimmt man die `enumerate()`-Funktion.

Das Zusammensetzen von Werten und Zeichenketten mittels `str()` und ``+`` ist unübersichtlich und eher BASIC als idiomatisches Python. In Python verwendet man Zeichenkettenformatierung mit dem ``%``-Operator oder der `format()`-Methode auf Zeichenketten.

Der Dateimodus 'w+' sieht problematisch aus. Der macht nur Sinn wenn a) die Dateien schon bestehen (können), b) der alte Inhalt nicht gelöscht werden soll, und c) es praktisch möglich ist da am Anfang neuen Inhalt zu schreiben und der schon vorhandene Inhalt der danach kommt Sinn macht. Gerade letzteres ist bei Textdateien *sehr* unwahrscheinlich, denn man müsste von der Länge her ja am Anfang genau die Länge von vorhandenen Zeilen treffen.

Edit: Dann lern Python wenn Du's nicht kannst.
BlackJack

@Student_1515: Vielleicht nochmal zur Klarstellung, Programmieren funktioniert nicht so dass man irgendwas hinschreibt von dem man denkt das es vielleicht irgendwie so aussehen müsste, und sich dann in einem Forum das ganze in lauffähigen Code umschreiben lässt. Zu dem Thema: An alle Schüler und Studenten mit Informatikproblemen.

Zur ganz konkreten Frage musst Du Dich mit Zeichenketten und Zeichenkettenformatierung beschäftigen. Da sollte man eigentlich in jedem brauchbaren Grundlagentutorial zu tun bekommen.
Antworten