Seite 1 von 1

String in .txt Datei schreiben funktioniert nicht richtig

Verfasst: Dienstag 15. Dezember 2020, 16:58
von NinoBaumann
Ich habe folgendes Programm geschrieben

Code: Alles auswählen

n1 = 5
n2 = 9
Punkte = (n1 + n2)*2

datei = open('textdatei.txt','a')

for i in range(Punkte):
    
    Punkt = 43+i

    a = "asm_const_grid_extract_v1- +",Punkt,", +Construct 2PointCurve-Evaluate Geometry-+ // @"
    
    
    datei.write("\n"+str(a))
    
datei.close()
und als Aufgabe bekomme ich

Code: Alles auswählen

('asm_const_grid_extract_v1- +', 43, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 44, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 45, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 46, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 47, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 48, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 49, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 50, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 51, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 52, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 53, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 54, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 55, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 56, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 57, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 58, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 59, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 60, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 61, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 62, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 63, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 64, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 65, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 66, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 67, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 68, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 69, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
('asm_const_grid_extract_v1- +', 70, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
Was jetzt nicht passt sind folgende Sachen (unten auch farblich markiert)
-Die ganze Zeile soll nicht in Kommas stehen,
-die Gänsefüßchen ' sollen nirgends sein,
-das Leerzeichen vor der fortlaufenden Zahl und die Kommas darum sollen nicht da sein
Eigentlich soll es folgendermaßen aussehen (oben falsch, unten richtig)

Code: Alles auswählen

('asm_const_grid_extract_v1- +', 43, '+, +Construct 2PointCurve-Evaluate Geometry-+ // @')
asm_const_grid_extract_v1- +43+, +Construct 2PointCurve-Evaluate Geometry-+ // @

Re: String in .txt Datei schreiben funktioniert nicht richtig

Verfasst: Dienstag 15. Dezember 2020, 17:22
von malzbier
Bei
a = "asm_const_grid_extract_v1- +",Punkt,", +Construct 2PointCurve-Evaluate Geometry-+ // @"

liegt der Fehler. Wenn du einen String verbinden willst, machst du es nicht mit ',' sonder mit '+'

a = "asm_const_grid_extract_v1- +" + str(Punkt) + "+, +Construct 2PointCurve-Evaluate Geometry-+ // @"

Re: String in .txt Datei schreiben funktioniert nicht richtig

Verfasst: Dienstag 15. Dezember 2020, 18:09
von narpfel
Anstatt `+` sollte man besser Stringformatierung benutzen, um Strings zu erstellen. Das ist besser lesbar, man spart sich das explizite Umwandeln mit `str()`, und es ist performanter:

Code: Alles auswählen

def main():
    n1 = 5
    n2 = 9
    points_count = (n1 + n2) * 2
    offset = 43

    with open("textdatei.txt", "a") as file:
        for point in range(offset, points_count + offset):
            file.write(f"asm_const_grid_extract_v1- +{point}+, +Construct 2PointCurve-Evaluate Geometry-+ // @\n")


if __name__ == "__main__":
    main()
Sonstige Anmerkungen: `n1` und `n2` sind keine guten Namen, weil sie nicht beschreiben, was die Werte bedeuten.

Benutzte `with`, um Dateien zu öffnen. Das stellt sicher, dass die Datei am Ende auch sicher wieder geschlossen wird und alle Daten geschrieben wurden.

Das Zeilenende ist ein... Zeilenende und gehört damit ans Ende der Zeile, nicht an den Anfang (sonst hast du eine leere Zeile am Anfang der Datei und die letzte Zeile hat kein Zeilenende).

Code sollte nicht auf Modulebene stehen, sondern zumindest in einer `main`-Funktion, die durch das `if __name__ == "__main__"`-Idiom aufgerufen wird. Damit vermeidet man globale Variablen und alle Flüchtigkeitsfehler, die man sich damit einhandelt.

Re: String in .txt Datei schreiben funktioniert nicht richtig

Verfasst: Dienstag 15. Dezember 2020, 19:07
von NinoBaumann
Hallo narpfel,

vielen dank für die hilfreichen Tipps und natürlich den Code!!!!

Grüße
Nino

Re: String in .txt Datei schreiben funktioniert nicht richtig

Verfasst: Dienstag 15. Dezember 2020, 20:25
von __blackjack__
@NinoBaumann: Und noch die Info was da passiert ist: Du hast da Tupel erstellt und die in Zeichenketten umgewandelt.